#include <bits/stdc++.h>
 
#define SPED                                                                                                           \
    ios_base::sync_with_stdio(false);                                                                                  \
    cin.tie(0);                                                                                                        \
    cout.tie(0);
 
#define endl "\n"
#define fi first
#define se second
#define lint long long
#define fami signed
#define lore main
#define freefire freopen
 
const lint INF = 0x1f1f1f1f1f1f1f1f;
const lint NEG = 0xE1E1E1E1E1E1E1E1;
const lint mod = 1e9 + 19972207;
 
using namespace std;
 
int t;
lint ways;
lint p[260005], gt[260005], inv[260005], a[260005];
int n;
lint k;
vector<lint> maku;
 
lint binpow(lint x, lint SA)
{
    if (SA == 0)
        return 1;
    lint temp = binpow(x, SA >> 1);
    temp *= temp;
    temp %= mod;
    if (SA & 1)
    {
        temp *= x;
        temp %= mod;
    }
    return temp;
}
 
void Try(int idx, int cnt, int mask)
{
    if (idx == n)
    {
        if (cnt == 0)
            maku.emplace_back(mask);
        return;
    }
    if (cnt < 0)
        return;
 
    Try(idx + 1, cnt + 1, mask | (1 << idx)); /// mask 1 là bit đó cho sang trái, else cho sang phải
    Try(idx + 1, cnt - 1, mask);
}
 
string debug(lint masku)
{
    string res;
    for (int i = 0; i < n; i++)
        res += char('0' + (masku >> i & 1));
    // reverse(res.begin(), res.end());
    return res;
}
 
void solve12()
{
    maku.clear();
    Try(0, 0, 0);
 
    if (maku.size() < k)
    {
        cout << -1 << endl;
        return;
    }
 
    sort(maku.begin(), maku.end());
    int cntl = 0, cntr = 0;
    static int l[25], r[25];
    for (int i = 0; i < n; i++)
    {
        if (maku[k - 1] >> i & 1)
            l[++cntl] = a[i + 1];
        else
            r[++cntr] = a[i + 1];
    }
 
    sort(l + 1, l + 1 + cntl, greater<int>());
    sort(r + 1, r + 1 + cntr, greater<int>());
 
    lint res = 0;
    int cnt = 1;
    for (int i = 1; i <= cntl; i++)
    {
        res += (l[i] * p[cnt++]) % mod;
        res %= mod;
    }
    for (int i = 1; i <= cntr; i++)
    {
        res += (r[i] * p[cnt++]) % mod;
        res %= mod;
    }
 
    cout << res << endl;
}
 
void solve3()
{
    int cnt = 1;
    lint res = 0;
    for (lint i = n; i >= 1; i--)
    {
        res += (i * p[cnt++]) % mod;
        res %= mod;
    }
    for (lint i = 2 * n; i >= n + 1; i--)
    {
        res += (i * p[cnt++]) % mod;
        res %= mod;
    }
    cout << res << endl;
}
 
fami lore()
{
    if (fopen("permutations.inp", "r"))
    {
        freefire("permutations.inp", "r", stdin);
        freefire("permutations.out", "w", stdout);
    }
    SPED;
    p[0] = 1;
    for (int i = 1; i <= 260000; i++)
    {
        p[i] = p[i - 1] * 22071997;
        p[i] %= mod;
    }
    gt[0] = 1;
    for (int i = 1; i <= 260000; i++)
    {
        gt[i] = gt[i - 1] * i;
        gt[i] %= mod;
    }
    inv[260000] = binpow(gt[260000], mod - 2);
    for (int i = 259999; i >= 0; i--)
    {
        inv[i] = inv[i + 1] * (i + 1);
        inv[i] %= mod;
    }
    iota(a + 1, a + 1 + 260000, 1);
 
    cin >> t;
    while (t--)
    {
        cin >> n >> k;
        if (k == 1)
        {
            solve3();
        }
        else if (n <= 13)
        {
            n *= 2;
            solve12();
        }
        else
            cout << -1 << endl;
    }
}
// Let your soul wander where dreams are born.
				I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIFNQRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICBjaW4udGllKDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgY291dC50aWUoMCk7CgojZGVmaW5lIGVuZGwgIlxuIgojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgbGludCBsb25nIGxvbmcKI2RlZmluZSBmYW1pIHNpZ25lZAojZGVmaW5lIGxvcmUgbWFpbgojZGVmaW5lIGZyZWVmaXJlIGZyZW9wZW4KCmNvbnN0IGxpbnQgSU5GID0gMHgxZjFmMWYxZjFmMWYxZjFmOwpjb25zdCBsaW50IE5FRyA9IDB4RTFFMUUxRTFFMUUxRTFFMTsKY29uc3QgbGludCBtb2QgPSAxZTkgKyAxOTk3MjIwNzsKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgdDsKbGludCB3YXlzOwpsaW50IHBbMjYwMDA1XSwgZ3RbMjYwMDA1XSwgaW52WzI2MDAwNV0sIGFbMjYwMDA1XTsKaW50IG47CmxpbnQgazsKdmVjdG9yPGxpbnQ+IG1ha3U7CgpsaW50IGJpbnBvdyhsaW50IHgsIGxpbnQgU0EpCnsKICAgIGlmIChTQSA9PSAwKQogICAgICAgIHJldHVybiAxOwogICAgbGludCB0ZW1wID0gYmlucG93KHgsIFNBID4+IDEpOwogICAgdGVtcCAqPSB0ZW1wOwogICAgdGVtcCAlPSBtb2Q7CiAgICBpZiAoU0EgJiAxKQogICAgewogICAgICAgIHRlbXAgKj0geDsKICAgICAgICB0ZW1wICU9IG1vZDsKICAgIH0KICAgIHJldHVybiB0ZW1wOwp9Cgp2b2lkIFRyeShpbnQgaWR4LCBpbnQgY250LCBpbnQgbWFzaykKewogICAgaWYgKGlkeCA9PSBuKQogICAgewogICAgICAgIGlmIChjbnQgPT0gMCkKICAgICAgICAgICAgbWFrdS5lbXBsYWNlX2JhY2sobWFzayk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKGNudCA8IDApCiAgICAgICAgcmV0dXJuOwoKICAgIFRyeShpZHggKyAxLCBjbnQgKyAxLCBtYXNrIHwgKDEgPDwgaWR4KSk7IC8vLyBtYXNrIDEgbMOgIGJpdCDEkcOzIGNobyBzYW5nIHRyw6FpLCBlbHNlIGNobyBzYW5nIHBo4bqjaQogICAgVHJ5KGlkeCArIDEsIGNudCAtIDEsIG1hc2spOwp9CgpzdHJpbmcgZGVidWcobGludCBtYXNrdSkKewogICAgc3RyaW5nIHJlczsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQogICAgICAgIHJlcyArPSBjaGFyKCcwJyArIChtYXNrdSA+PiBpICYgMSkpOwogICAgLy8gcmV2ZXJzZShyZXMuYmVnaW4oKSwgcmVzLmVuZCgpKTsKICAgIHJldHVybiByZXM7Cn0KCnZvaWQgc29sdmUxMigpCnsKICAgIG1ha3UuY2xlYXIoKTsKICAgIFRyeSgwLCAwLCAwKTsKCiAgICBpZiAobWFrdS5zaXplKCkgPCBrKQogICAgewogICAgICAgIGNvdXQgPDwgLTEgPDwgZW5kbDsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgc29ydChtYWt1LmJlZ2luKCksIG1ha3UuZW5kKCkpOwogICAgaW50IGNudGwgPSAwLCBjbnRyID0gMDsKICAgIHN0YXRpYyBpbnQgbFsyNV0sIHJbMjVdOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCiAgICB7CiAgICAgICAgaWYgKG1ha3VbayAtIDFdID4+IGkgJiAxKQogICAgICAgICAgICBsWysrY250bF0gPSBhW2kgKyAxXTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHJbKytjbnRyXSA9IGFbaSArIDFdOwogICAgfQoKICAgIHNvcnQobCArIDEsIGwgKyAxICsgY250bCwgZ3JlYXRlcjxpbnQ+KCkpOwogICAgc29ydChyICsgMSwgciArIDEgKyBjbnRyLCBncmVhdGVyPGludD4oKSk7CgogICAgbGludCByZXMgPSAwOwogICAgaW50IGNudCA9IDE7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBjbnRsOyBpKyspCiAgICB7CiAgICAgICAgcmVzICs9IChsW2ldICogcFtjbnQrK10pICUgbW9kOwogICAgICAgIHJlcyAlPSBtb2Q7CiAgICB9CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBjbnRyOyBpKyspCiAgICB7CiAgICAgICAgcmVzICs9IChyW2ldICogcFtjbnQrK10pICUgbW9kOwogICAgICAgIHJlcyAlPSBtb2Q7CiAgICB9CgogICAgY291dCA8PCByZXMgPDwgZW5kbDsKfQoKdm9pZCBzb2x2ZTMoKQp7CiAgICBpbnQgY250ID0gMTsKICAgIGxpbnQgcmVzID0gMDsKICAgIGZvciAobGludCBpID0gbjsgaSA+PSAxOyBpLS0pCiAgICB7CiAgICAgICAgcmVzICs9IChpICogcFtjbnQrK10pICUgbW9kOwogICAgICAgIHJlcyAlPSBtb2Q7CiAgICB9CiAgICBmb3IgKGxpbnQgaSA9IDIgKiBuOyBpID49IG4gKyAxOyBpLS0pCiAgICB7CiAgICAgICAgcmVzICs9IChpICogcFtjbnQrK10pICUgbW9kOwogICAgICAgIHJlcyAlPSBtb2Q7CiAgICB9CiAgICBjb3V0IDw8IHJlcyA8PCBlbmRsOwp9CgpmYW1pIGxvcmUoKQp7CiAgICBpZiAoZm9wZW4oInBlcm11dGF0aW9ucy5pbnAiLCAiciIpKQogICAgewogICAgICAgIGZyZWVmaXJlKCJwZXJtdXRhdGlvbnMuaW5wIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlZWZpcmUoInBlcm11dGF0aW9ucy5vdXQiLCAidyIsIHN0ZG91dCk7CiAgICB9CiAgICBTUEVEOwogICAgcFswXSA9IDE7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSAyNjAwMDA7IGkrKykKICAgIHsKICAgICAgICBwW2ldID0gcFtpIC0gMV0gKiAyMjA3MTk5NzsKICAgICAgICBwW2ldICU9IG1vZDsKICAgIH0KICAgIGd0WzBdID0gMTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IDI2MDAwMDsgaSsrKQogICAgewogICAgICAgIGd0W2ldID0gZ3RbaSAtIDFdICogaTsKICAgICAgICBndFtpXSAlPSBtb2Q7CiAgICB9CiAgICBpbnZbMjYwMDAwXSA9IGJpbnBvdyhndFsyNjAwMDBdLCBtb2QgLSAyKTsKICAgIGZvciAoaW50IGkgPSAyNTk5OTk7IGkgPj0gMDsgaS0tKQogICAgewogICAgICAgIGludltpXSA9IGludltpICsgMV0gKiAoaSArIDEpOwogICAgICAgIGludltpXSAlPSBtb2Q7CiAgICB9CiAgICBpb3RhKGEgKyAxLCBhICsgMSArIDI2MDAwMCwgMSk7CgogICAgY2luID4+IHQ7CiAgICB3aGlsZSAodC0tKQogICAgewogICAgICAgIGNpbiA+PiBuID4+IGs7CiAgICAgICAgaWYgKGsgPT0gMSkKICAgICAgICB7CiAgICAgICAgICAgIHNvbHZlMygpOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChuIDw9IDEzKQogICAgICAgIHsKICAgICAgICAgICAgbiAqPSAyOwogICAgICAgICAgICBzb2x2ZTEyKCk7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgICAgY291dCA8PCAtMSA8PCBlbmRsOwogICAgfQp9Ci8vIExldCB5b3VyIHNvdWwgd2FuZGVyIHdoZXJlIGRyZWFtcyBhcmUgYm9ybi4=