//#pragma GCC optimize("Ofast,unroll-loops")
//#pragma GCC target("avx2,tune=native")
#include <bits/stdc++.h>
using namespace std;
#define file "permutations"
#define ff(i, a, b) for(auto i=(a); i<=(b); ++i)
#define ffr(i, b, a) for(auto i=(b); i>=(a); --i)
#define nl "\n"
#define ss " "
#define pb emplace_back
#define fi first
#define se second
#define sz(s) (int)s.size()
#define all(s) (s).begin(), (s).end()
#define ms(a,x) memset(a, x, sizeof (a))
#define cn continue
#define re exit(0)
typedef long long ll;
typedef unsigned long long ull;
typedef __int128 i128;
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
inline void rf(){
ios_base::sync_with_stdio(false);
cin.tie(nullptr); cout.tie(nullptr);
if(fopen(file".inp","r")){
freopen(file".inp","r",stdin);
freopen(file".out","w",stdout);
}
}
static inline ull comb_capped(ull n, ull k, ull cap){
if(k>n) return 0;
k=min(k, n-k);
if(k==0) return 1;
i128 prod=1;
for(ull i=1;i<=k;i++){
ull num = n - (k - i);
ull den = i;
ull g = __gcd(num, den);
num/=g; den/=g;
if(den>1){
ull g2 = __gcd((ull)((ull)(prod%den)), den);
prod/=g2; den/=g2;
}
prod*= (i128)num;
if(prod > (i128)cap) return cap+1;
}
return (ull)prod;
}
static inline ull pref_count(ull m, ull V, ull cap){
if(V<m) return 0;
if(V>2*m) V=2*m;
ull num = 2*m - V + 1;
ull den = m + 1;
i128 thr = (i128)cap * den;
ull limit = (ull)(thr / num) + 1;
ull c = comb_capped(V, m, limit);
if(c>limit) return cap+1;
i128 val = (i128)c * num / den;
if(val>(i128)cap) return cap+1;
return (ull)val;
}
int main(){
rf();
const ll BASE = 22071997LL;
const ll MODH = 1000000000LL + 19972207LL;
int T;
if(!(cin>>T)) return 0;
while(T--){
ull n; unsigned long long k;
cin>>n>>k;
ull cat_all = pref_count(n, 2*n-1, k);
if(cat_all<k){
cout<<-1<<nl;
cn;
}
vector<int> open_pos; open_pos.reserve(n);
ull upper = 2*n-1;
for(ull m=n; m>=1; --m){
ull lo=m, hi=min(upper, 2*m-1);
while(lo<hi){
ull mid = (lo+hi)>>1;
ull s = pref_count(m, mid, k);
if(s>=k) hi=mid;
else lo=mid+1;
}
ull v=lo;
ull before = pref_count(m, v-1, k);
k -= before;
open_pos.pb((int)v);
upper = v-1;
}
sort(all(open_pos));
vector<int> perm; perm.reserve(2*n);
for(int i=(int)open_pos.size()-1;i>=0;--i) perm.pb(open_pos[i]);
vector<char> isA(2*n+1,0);
for(int x:open_pos) isA[x]=1;
for(ull x=1;x<=2*n;++x) if(!isA[x]) perm.pb((int)x);
ll ans=0, pw=1;
for(size_t i=1;i<=perm.size();++i){
pw = (ll)((__int128)pw * BASE % MODH);
ans = (ans + (ll)((__int128)perm[i-1]*pw % MODH)) % MODH;
}
cout<<ans<<nl;
}
return 0;
}
Ly8jcHJhZ21hIEdDQyBvcHRpbWl6ZSgiT2Zhc3QsdW5yb2xsLWxvb3BzIikKLy8jcHJhZ21hIEdDQyB0YXJnZXQoImF2eDIsdHVuZT1uYXRpdmUiKQojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgZmlsZSAicGVybXV0YXRpb25zIgojZGVmaW5lIGZmKGksIGEsIGIpIGZvcihhdXRvIGk9KGEpOyBpPD0oYik7ICsraSkKI2RlZmluZSBmZnIoaSwgYiwgYSkgZm9yKGF1dG8gaT0oYik7IGk+PShhKTsgLS1pKQojZGVmaW5lIG5sICJcbiIKI2RlZmluZSBzcyAiICIKI2RlZmluZSBwYiBlbXBsYWNlX2JhY2sKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIHN6KHMpIChpbnQpcy5zaXplKCkKI2RlZmluZSBhbGwocykgKHMpLmJlZ2luKCksIChzKS5lbmQoKQojZGVmaW5lIG1zKGEseCkgbWVtc2V0KGEsIHgsIHNpemVvZiAoYSkpCiNkZWZpbmUgY24gY29udGludWUKI2RlZmluZSByZSBleGl0KDApCgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdWxsOwp0eXBlZGVmIF9faW50MTI4IGkxMjg7CgptdDE5OTM3XzY0IHJuZyhjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCkudGltZV9zaW5jZV9lcG9jaCgpLmNvdW50KCkpOwppbmxpbmUgdm9pZCByZigpewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKG51bGxwdHIpOyBjb3V0LnRpZShudWxscHRyKTsKICAgIGlmKGZvcGVuKGZpbGUiLmlucCIsInIiKSl7CiAgICAgICAgZnJlb3BlbihmaWxlIi5pbnAiLCJyIixzdGRpbik7CiAgICAgICAgZnJlb3BlbihmaWxlIi5vdXQiLCJ3IixzdGRvdXQpOwogICAgfQp9CgpzdGF0aWMgaW5saW5lIHVsbCBjb21iX2NhcHBlZCh1bGwgbiwgdWxsIGssIHVsbCBjYXApewogICAgaWYoaz5uKSByZXR1cm4gMDsKICAgIGs9bWluKGssIG4tayk7CiAgICBpZihrPT0wKSByZXR1cm4gMTsKICAgIGkxMjggcHJvZD0xOwogICAgZm9yKHVsbCBpPTE7aTw9aztpKyspewogICAgICAgIHVsbCBudW0gPSBuIC0gKGsgLSBpKTsKICAgICAgICB1bGwgZGVuID0gaTsKICAgICAgICB1bGwgZyA9IF9fZ2NkKG51bSwgZGVuKTsKICAgICAgICBudW0vPWc7IGRlbi89ZzsKICAgICAgICBpZihkZW4+MSl7CiAgICAgICAgICAgIHVsbCBnMiA9IF9fZ2NkKCh1bGwpKCh1bGwpKHByb2QlZGVuKSksIGRlbik7CiAgICAgICAgICAgIHByb2QvPWcyOyBkZW4vPWcyOwogICAgICAgIH0KICAgICAgICBwcm9kKj0gKGkxMjgpbnVtOwogICAgICAgIGlmKHByb2QgPiAoaTEyOCljYXApIHJldHVybiBjYXArMTsKICAgIH0KICAgIHJldHVybiAodWxsKXByb2Q7Cn0KCnN0YXRpYyBpbmxpbmUgdWxsIHByZWZfY291bnQodWxsIG0sIHVsbCBWLCB1bGwgY2FwKXsKICAgIGlmKFY8bSkgcmV0dXJuIDA7CiAgICBpZihWPjIqbSkgVj0yKm07CiAgICB1bGwgbnVtID0gMiptIC0gViArIDE7CiAgICB1bGwgZGVuID0gbSArIDE7CiAgICBpMTI4IHRociA9IChpMTI4KWNhcCAqIGRlbjsKICAgIHVsbCBsaW1pdCA9ICh1bGwpKHRociAvIG51bSkgKyAxOwogICAgdWxsIGMgPSBjb21iX2NhcHBlZChWLCBtLCBsaW1pdCk7CiAgICBpZihjPmxpbWl0KSByZXR1cm4gY2FwKzE7CiAgICBpMTI4IHZhbCA9IChpMTI4KWMgKiBudW0gLyBkZW47CiAgICBpZih2YWw+KGkxMjgpY2FwKSByZXR1cm4gY2FwKzE7CiAgICByZXR1cm4gKHVsbCl2YWw7Cn0KCmludCBtYWluKCl7CiAgICByZigpOwogICAgY29uc3QgbGwgQkFTRSA9IDIyMDcxOTk3TEw7CiAgICBjb25zdCBsbCBNT0RIID0gMTAwMDAwMDAwMExMICsgMTk5NzIyMDdMTDsKCiAgICBpbnQgVDsgCiAgICBpZighKGNpbj4+VCkpIHJldHVybiAwOwogICAgd2hpbGUoVC0tKXsKICAgICAgICB1bGwgbjsgdW5zaWduZWQgbG9uZyBsb25nIGs7CiAgICAgICAgY2luPj5uPj5rOwoKICAgICAgICB1bGwgY2F0X2FsbCA9IHByZWZfY291bnQobiwgMipuLTEsIGspOwogICAgICAgIGlmKGNhdF9hbGw8ayl7CiAgICAgICAgICAgIGNvdXQ8PC0xPDxubDsKICAgICAgICAgICAgY247CiAgICAgICAgfQoKICAgICAgICB2ZWN0b3I8aW50PiBvcGVuX3Bvczsgb3Blbl9wb3MucmVzZXJ2ZShuKTsKICAgICAgICB1bGwgdXBwZXIgPSAyKm4tMTsKICAgICAgICBmb3IodWxsIG09bjsgbT49MTsgLS1tKXsKICAgICAgICAgICAgdWxsIGxvPW0sIGhpPW1pbih1cHBlciwgMiptLTEpOwogICAgICAgICAgICB3aGlsZShsbzxoaSl7CiAgICAgICAgICAgICAgICB1bGwgbWlkID0gKGxvK2hpKT4+MTsKICAgICAgICAgICAgICAgIHVsbCBzID0gcHJlZl9jb3VudChtLCBtaWQsIGspOwogICAgICAgICAgICAgICAgaWYocz49aykgaGk9bWlkOwogICAgICAgICAgICAgICAgZWxzZSBsbz1taWQrMTsKICAgICAgICAgICAgfQogICAgICAgICAgICB1bGwgdj1sbzsKICAgICAgICAgICAgdWxsIGJlZm9yZSA9IHByZWZfY291bnQobSwgdi0xLCBrKTsKICAgICAgICAgICAgayAtPSBiZWZvcmU7CiAgICAgICAgICAgIG9wZW5fcG9zLnBiKChpbnQpdik7CiAgICAgICAgICAgIHVwcGVyID0gdi0xOwogICAgICAgIH0KICAgICAgICBzb3J0KGFsbChvcGVuX3BvcykpOwoKICAgICAgICB2ZWN0b3I8aW50PiBwZXJtOyBwZXJtLnJlc2VydmUoMipuKTsKICAgICAgICBmb3IoaW50IGk9KGludClvcGVuX3Bvcy5zaXplKCktMTtpPj0wOy0taSkgcGVybS5wYihvcGVuX3Bvc1tpXSk7CiAgICAgICAgdmVjdG9yPGNoYXI+IGlzQSgyKm4rMSwwKTsKICAgICAgICBmb3IoaW50IHg6b3Blbl9wb3MpIGlzQVt4XT0xOwogICAgICAgIGZvcih1bGwgeD0xO3g8PTIqbjsrK3gpIGlmKCFpc0FbeF0pIHBlcm0ucGIoKGludCl4KTsKCiAgICAgICAgbGwgYW5zPTAsIHB3PTE7CiAgICAgICAgZm9yKHNpemVfdCBpPTE7aTw9cGVybS5zaXplKCk7KytpKXsKICAgICAgICAgICAgcHcgPSAobGwpKChfX2ludDEyOClwdyAqIEJBU0UgJSBNT0RIKTsKICAgICAgICAgICAgYW5zID0gKGFucyArIChsbCkoKF9faW50MTI4KXBlcm1baS0xXSpwdyAlIE1PREgpKSAlIE1PREg7CiAgICAgICAgfQogICAgICAgIGNvdXQ8PGFuczw8bmw7CiAgICB9CiAgICByZXR1cm4gMDsKfQo=