#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int a[20005],n,m,fs;
struct Thing{
int l,r;
}ans[1000005];
vector<Thing> v;
void Clear(){
for(int i=1;i<=n+1;i++)a[i]=0;
}
void Solve(){
cin>>n>>m,fs=0;
for(int i=1;i<=n;i++){
ll x;
cin>>x;
while(x>1)x>>=1,a[i]++;
}
for(int i=n+1;i>=1;i--)a[i]-=a[i-1];
stack<int> s;
for(int i=1;i<=n+m;i++){
if(i-m>=1){
assert(a[i-m]>=0);
while(a[i-m])s.push(i-m),a[i-m]--;
}
if(a[i]<0){
while(a[i]){
if(!s.size())return puts("-1"),Clear();
v.push_back({s.top(),i-1});
ans[++fs]={s.top(),i-1},s.pop(),a[i]++;
}
}
}
if(s.size())return puts("-1"),Clear();
// cout<<fs<<'\n';
// for(int i=1;i<=fs;i++)cout<<ans[i].l<<' '<<ans[i].r<<'\n';
cout<<v.size()<<'\n';
for(int i=0;i<v.size();i++)cout<<v[i].l<<" "<<v[i].r<<'\n';
v.clear();
}
int main(){
int t;
cin>>t;
while(t--)Solve();
}
换了个输出方式就wa了50% 这个bug以前没见过