#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;

typedef long long ll;

const int md = 1000000007;
const int maxc = 2000010;

ll fact[maxc], invf[maxc];


ll binpow(ll a, ll b) {
    ll res = 1;
    for (; b > 0; b >>= 1) {
        if (b & 1) res = res * a % md;
        a = a * a % md;
    }
    return res;
}

ll C(int n, int m) {
    return (fact[n] * invf[m] % md) * invf[n-m] % md;
}

ll get(int ti, int tj, int fi, int fj) {
    int A = fi - ti;
    int B = fj - tj;
    return C(A + B, B);
}

void solve() {
    int r, c, r1, c1, r2, c2;
    scanf("%d %d", &r, &c);
    scanf("%d %d %d %d", &r1, &c1, &r2, &c2);
    ll ans = 0;
    if (c2 < c)
    for (int ri = 1; ri < r1; ri++)
        ans = (ans + get(1, 1, ri, c2) * get(ri, c2 + 1, r, c)) % md;
    if (c1 > 1)
    for (int ri = r2 + 1; ri <= r; ri++)
        ans = (ans + get(1, 1, ri, c1 - 1) * get(ri, c1, r, c)) % md;
    cout << ans % md << endl;
}

int main() {
    fact[0] = invf[0] = 1;
    for (int i = 1; i <= 2000000; i++) {
        fact[i] = fact[i-1] * i % md;
        invf[i] = binpow(fact[i], md - 2);
    }
    //cout << get(1, 1, 2, 2) << endl;
    //return 0;
    
    int tc;
    scanf("%d", &tc);
    while (tc--) solve();
    
    return 0;
}