普通组合数
ll C(ll m,ll n)
{
if(m==0||n==m) return 1;
ll sb=min(m,n-m);
ll f=1,f1;
for(ll i=1;i<=sb;i++)
{
f1=f*(n-i+1)/(i);
f=f1;
}
return f1;
}
Lucas大数组合数
const ll mod = 1e9 + 7;
ll exp_mod(ll a, ll b, ll p) {
ll res = 1;
while(b != 0) {
if(b&1) res = (res * a) % p;
a = (a*a) % p;
b >>= 1;
}
return res;
}
ll Comb(ll a, ll b, ll p) {
if(a < b) return 0;
if(a == b) return 1;
if(b > a - b) b = a - b;
ll ans = 1, ca = 1, cb = 1;
for(ll i = 0; i < b; ++i) {
ca = (ca * (a - i))%p;
cb = (cb * (b - i))%p;
}
ans = (ca*exp_mod(cb, p - 2, p)) % p;
return ans;
}
ll Lucas(ll n, ll m, ll p) {
ll ans = 1;
while(n&&m&&ans) {
ans = (ans*Comb(n%p, m%p, p)) % p;
n /= p;
m /= p;
}
return ans;
}
int main(){
std::ios::sync_with_stdio(false);
std::cin.tie(0);
ll T;
cin>>T;
while(T--){
ll n,m;
cin>>n>>m;
ll ans = Lucas(max(m,n),min(m,n),mod);
cout<< ans <<endl;
}
return 0;
}