#include using namespace std; const int nmax=1e6+42,mod=1e9+7; int n,m; long long pwr(long long a,long long b) { long long ret=1; while(b) { if(b%2)ret=ret*a%mod; a=a*a%mod; b=b/2; } return ret; } int solve() { scanf("%i%i",&n,&m); long long outp=1; /* for(int i=n;i>1;i--) for(int j=m;j>1;j--) outp=outp*(1+min(i,j))%mod; */ for(int i=2;i<=n&&i<=m;i++) { long long at_least=1LL*(n+1-i)*(m+1-i); long long at_most=1LL*(n+1-i-1)*(m+1-i-1); long long cnt=at_least-at_most; outp=outp*pwr(i+1,cnt)%mod; } return outp; } int main() { freopen("matrices.in","r",stdin); freopen("matrices.out","w",stdout); int t; scanf("%i",&t); while(t) { t--; printf("%i\n",solve()); } return 0; }