// @author cebrusfs
// headers {{{
#include<bits/stdc++.h>
using namespace std;
// }}}
// macros {{{
#ifdef WIN32
    #define LLD "%I64d"
#else
    #define LLD "%lld"
#endif

#define FOR(i,c) for(__typeof((c).begin()) i=(c).begin();i!=(c).end();i++)

#define ALL(x) (x).begin(), (x).end()
#define SZ(x) ((int)(x).size())
#define UNIQUE(x) ((x).erase(unique(ALL(x)), (x).end()))
#define MS(x, v) std::fill(ALL(x), (v));


#define IOS ios_base::sync_with_stdio(false)

#define REP(i,n) for(int i=0;i<(n);i++)
#define REP1(i,a,b) for(int i=(a);i<=(b);i++)

#define PER(i,n) for(int i=(n)-1;i>=0;i--)
#define PER1(i,a,b) for(int i=(a);i>=(b);i--)

#ifdef ONLINE_JUDGE
#define FILEIO(x) freopen(#x ".in","r",stdin);freopen(#x ".out","w",stdout);
#define FILEIOS freopen("input.txt","r",stdin);freopen("output.txt","w",stdout);
#else
#define FILEIO(x) ;
#define FILEIOS ;
#endif

typedef unsigned int uint;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;

typedef pair<int, int> PII;
#define MP make_pair
#define F first
#define S second

typedef vector<int> VI;
#define PB push_back
#define PF push_front

#define PPB pop_back
#define PPF pop_front


// C++11
#if __cplusplus >= 201103L
#define MT make_tuple
typedef tuple<int, int> TII;
#endif

#define runtime() ((double)clock() / CLOCKS_PER_SEC)

const double eps = 1e-7;
// }}}

#define MAX 2000005



const int MOD = (1e9 + 7);

long long fac[MAX];
long long inv[MAX];

long long C(int n, int m)
{
    return fac[n] * inv[m] % MOD * inv[n - m] % MOD;
}

long long powmod(int a, int b, int p)
{
    if (b == 0) return 1 % p;
    long long v = powmod(a, b / 2, p);
    return v * v % MOD * (b % 2 == 1 ? a : 1) % MOD;
}

long long calinv(int val, int p)
{
    return powmod(val, p - 2, p);
}

long long count(int n, int m)
{
    if (n <= 0 or m <= 0) return 0;
    //printf("!%d %d\n", n, m);
    return C(n + m - 2, n - 1);
}

int main()
{
    fac[0] = 1;
    for (int i = 1; i < MAX; ++i)
        fac[i] = fac[i - 1] * i % MOD;

    inv[MAX - 1] = calinv(fac[MAX - 1], MOD);
    for (int i = MAX - 2; i >= 0; --i)
        inv[i] = inv[i + 1] * (i + 1) % MOD;

    int z;
    scanf("%d", &z);
    while (z--)
    {
        int r, c, r1, r2, c1, c2;
        scanf("%d %d", &r, &c);
        scanf("%d %d %d %d", &r1, &c1, &r2, &c2);

        long long ans = 0;
        for (int i = 1; i < c1; ++i)
            ans += count(r2, i) * count(r - r2, c - i + 1), ans %= MOD;
        //printf("%lld\n", ans);
        for (int i = c2 + 1; i <= c; ++i)
            ans += count(r1 - 1, i) * count(r - r1 + 1, c - i + 1), ans %= MOD;

        printf("%lld\n", ans);
    }
}