// @adi28galaxyak
// Content: CDVA1607
#include "bits/stdc++.h"
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef vector< vi > vii;
typedef pair<int, int> pii;
#define FF first
#define SS second
#define pb(v) push_back(v)
#define mp(x,y) make_pair(x, y)
#define NITRO ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define s(n) scanf("%d",&n)
#define rep(i,start,end) for(int i = start;i<end;i++)
const int M = 1e9 + 7;
ll ncr[4005][4005];
void calNCR(){
rep(i,1,4001){
rep(j,0,i+1){
if(!j) ncr[i][j] = 1;
else ncr[i][j] = (ncr[i-1][j]%M + ncr[i-1][j-1]%M)%M;
}
}
}
int main(){
if(false) {
freopen("inp01.txt","r",stdin);
freopen("testout01.txt","w",stdout);
}
NITRO;
rep(i,0,4005)
rep(j,0,4005) ncr[i][j] = 0;
ncr[0][0] = 1;
calNCR();
int tt, n, q, i, k;
cin>>tt;
ll power[4005];
power[0] = 1;
rep(i,1,4005) power[i] = (power[i-1]*2)%M;
while(tt--){
cin>>n>>q;
while(q--){
cin>>i>>k;
if(k>i) puts("0");
else {
//cout<<ncr[i-1][k-1]%M<<" "<<power[n-i]<<endl;
ll ans=(ncr[i-1][k-1]%M)*power[n-i]%M;
printf("%lld\n",ans%M);
}
}
}
}
Ly8gQGFkaTI4Z2FsYXh5YWsKLy8gQ29udGVudDogQ0RWQTE2MDcKIAojaW5jbHVkZSAiYml0cy9zdGRjKysuaCIKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKdHlwZWRlZiB2ZWN0b3I8aW50PiB2aTsKdHlwZWRlZiB2ZWN0b3I8IHZpID4gdmlpOwp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IHBpaTsKI2RlZmluZSBGRiBmaXJzdAojZGVmaW5lIFNTIHNlY29uZAojZGVmaW5lIHBiKHYpIHB1c2hfYmFjayh2KQojZGVmaW5lIG1wKHgseSkgbWFrZV9wYWlyKHgsIHkpCiAKI2RlZmluZSBOSVRSTyBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApO2Npbi50aWUoMCk7Y291dC50aWUoMCk7CiNkZWZpbmUgcyhuKSBzY2FuZigiJWQiLCZuKQojZGVmaW5lIHJlcChpLHN0YXJ0LGVuZCkgZm9yKGludCBpID0gc3RhcnQ7aTxlbmQ7aSsrKQogCmNvbnN0IGludCBNID0gMWU5ICsgNzsKbGwgbmNyWzQwMDVdWzQwMDVdOwogCnZvaWQgY2FsTkNSKCl7CiAgICByZXAoaSwxLDQwMDEpewogICAgICAgIHJlcChqLDAsaSsxKXsKICAgICAgICAgICAgaWYoIWopIG5jcltpXVtqXSA9IDE7CiAgICAgICAgICAgIGVsc2UgbmNyW2ldW2pdID0gKG5jcltpLTFdW2pdJU0gKyBuY3JbaS0xXVtqLTFdJU0pJU07CiAgICAgICAgfQogICAgfQp9CiAKaW50IG1haW4oKXsKCWlmKGZhbHNlKSB7CgkJZnJlb3BlbigiaW5wMDEudHh0IiwiciIsc3RkaW4pOwoJCWZyZW9wZW4oInRlc3RvdXQwMS50eHQiLCJ3IixzdGRvdXQpOwoJfQoJTklUUk87CgkKCXJlcChpLDAsNDAwNSkKCSAgIHJlcChqLDAsNDAwNSkgbmNyW2ldW2pdID0gMDsKCW5jclswXVswXSA9IDE7CgljYWxOQ1IoKTsKCQoJaW50IHR0LCBuLCBxLCBpLCBrOwoJY2luPj50dDsKCWxsIHBvd2VyWzQwMDVdOwoJcG93ZXJbMF0gPSAxOwoJcmVwKGksMSw0MDA1KSBwb3dlcltpXSA9IChwb3dlcltpLTFdKjIpJU07CgkKCXdoaWxlKHR0LS0pewoJCWNpbj4+bj4+cTsKCQl3aGlsZShxLS0pewoJCQljaW4+Pmk+Pms7CgkJCWlmKGs+aSkgcHV0cygiMCIpOwogIAkJCWVsc2UgewogIAkJCQkvL2NvdXQ8PG5jcltpLTFdW2stMV0lTTw8IiAiPDxwb3dlcltuLWldPDxlbmRsOwogIAkJCQlsbCBhbnM9KG5jcltpLTFdW2stMV0lTSkqcG93ZXJbbi1pXSVNOwogIAkJCQlwcmludGYoIiVsbGRcbiIsYW5zJU0pOwogIAkJCX0KCQl9Cgl9Cn0KIA==