//题目要求的是每一个点最少要有两条边连接,所以可以先构成一个环。然后再把剩余的最短的边连接起来
#include<iostream>
#include<algorithm>
using namespace std ;
const int N=100010;
int n,m;
struct edge {
int num;
int w;
} a[N];
int T;
bool cmp(edge a,edge b) {
return a.w<b.w;
}
void solve() {
int ans=0;
for(int i=1; i<=n; i++) {
ans+=2*a[i].w;
}
ans+=(m-n)*(a[1].w+a[2].w);
cout<<ans<<endl;
for(int i=1; i<n; i++) cout<<i<<" "<<i+1<<endl;
cout<<n<<" "<<"1"<<endl;
for(int i=1; i<=m-n; i++) cout<<a[1].num<<" "<<a[2].num<<endl;
}
int main() {
cin>>T;
while(T--) {
cin>>n>>m;
for(int i=1; i<=n; i++) {
cin>>a[i].w;
a[i].num=i;
}
if(n<=2||m<n) {
cout<<"-1"<<endl;
continue;
}
sort(a+1,a+1+n,cmp);
solve();
}
return 0;
}