#include using namespace std; vector fact, invfact; long long MOD = 1e9 + 7; long long inv(long long b, int p = MOD - 2) { if(p == 0) return 1LL; long long x = inv(b, p / 2); x = x * x % MOD; if(p % 2) x = x * b % MOD; return x; } int main() { int T; cin >> T; fact.resize(500001), invfact.resize(500001); fact[0] = 1LL; for(int i = 1; i <= 500000; i++) { fact[i] = fact[i - 1] * 1LL * i % MOD; } invfact.back() = inv(fact.back()); for(int i = 499999; i >= 0; i--) { invfact[i] = invfact[i + 1] * 1LL * (i + 1) % MOD; } for(int tc = 1; tc <= T; tc++) { int H, W; cin >> H >> W; if(H == 1 || W == 1) { cout << 0 << "\n"; continue; } long long ans = (H + W - 3); ans %= MOD; ans *= fact[H + W - 4]; ans %= MOD; ans *= invfact[H - 2]; ans %= MOD; ans *= invfact[W - 2]; ans *= 2; ans %= MOD; if(ans < 0) ans += MOD; cout << ans << "\n"; } }