#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
const int N = 2e5, oo = 2e18, MOD = 998244353;
int xorfromZeroToN(int n) {
if (n % 4 == 0) return n;
return n ^ xorfromZeroToN(n-1);
}
int xRange(int l, int r) {
if (l == 0)
return xorfromZeroToN(r);
return xorfromZeroToN(r) ^ xorfromZeroToN(l-1);
}
int cnt(int n) {
if (n < 0)
return 0;
if (n == 0)
return 1;
int ans = (n >= 3) + 1;
if (n >= 3)
ans += ((n - 3) / 4);
return ans;
}
int cnt2(int n) {
if (n <= 0)
return 0;
int ans = 1;
if (n >= 1)
ans += (n - 1) / 4;
return ans;
}
int ans(int l, int r) {
if (l > r)
return 0;
int c = cnt(r) - cnt(l-1);
int c2 = cnt2(r) - cnt2(l-1);
// cout << c << ' ' << c2 << endl;
return c * (c - 1) / 2 + c2 * (c2 - 1) / 2;
}
// 0 1 2 0
void solve() {
int n, x; cin >> n >> x;
// cout << cnt(5) << ' ' << cnt2(5) << endl;
// cout << cnt(0) << ' ' << cnt2(0) << endl;
// cout << cnt(4) << ' ' << cnt2(4) << endl;
// 0 1 3 0 4 1
// cout << cnt(7) << ' ' << cnt2(7) << endl;
// cout << cnt(0) << ' ' << cnt2(0) << endl;
// cout << ans(1, x - 1) << endl;
// cout << ans(x + 1, n) << endl;
int res = ans(0, n) % MOD;
// cout << ans(0, n) << ' ' << ans(2, n) << ' ' << ans(0, 0) << endl;
res = (res - ans(x, n) % MOD + MOD) % MOD;
res = ((res - ans(0, x - 1) % MOD) + MOD) % MOD;
cout << res << endl;
// int ans = 0;
// for (int l = 1; l <= x; l++) {
// for (int r = x; r <= n; r++) {
// if (xRange(l, r) == 0) {
// cout << l << ' ' << r << endl;
// }
// }
// }
// for (int i = 0; i <= 8; i++) {
// cout << i << ' ' << xorfromZeroToN(i) << endl;
// }
}
signed main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
// #ifndef ONLINE_JUDGE
// freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
// #endif
int t; t = 1;
cin >> t;
while (t--) solve();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIGVuZGwgICAgICdcbicKI2RlZmluZSBpbnQgICAgICBsb25nIGxvbmcKCmNvbnN0IGludCBOID0gMmU1LCBvbyA9IDJlMTgsIE1PRCA9IDk5ODI0NDM1MzsKCmludCB4b3Jmcm9tWmVyb1RvTihpbnQgbikgewogICAgaWYgKG4gJSA0ID09IDApIHJldHVybiBuOwogICAgcmV0dXJuIG4gXiB4b3Jmcm9tWmVyb1RvTihuLTEpOwp9CgppbnQgeFJhbmdlKGludCBsLCBpbnQgcikgewogICAgaWYgKGwgPT0gMCkKICAgICAgICByZXR1cm4geG9yZnJvbVplcm9Ub04ocik7CiAgICByZXR1cm4geG9yZnJvbVplcm9Ub04ocikgXiB4b3Jmcm9tWmVyb1RvTihsLTEpOwp9CgppbnQgY250KGludCBuKSB7CiAgICBpZiAobiA8IDApCiAgICAgICAgcmV0dXJuIDA7CiAgICBpZiAobiA9PSAwKQogICAgICAgIHJldHVybiAxOyAKICAgIGludCBhbnMgPSAobiA+PSAzKSArIDE7CiAgICBpZiAobiA+PSAzKQogICAgICAgIGFucyArPSAoKG4gLSAzKSAvIDQpOwogICAgcmV0dXJuIGFuczsKfQppbnQgY250MihpbnQgbikgewogICAgaWYgKG4gPD0gMCkKICAgICAgICByZXR1cm4gMDsKICAgIGludCBhbnMgPSAxOwogICAgaWYgKG4gPj0gMSkKICAgICAgICBhbnMgKz0gKG4gLSAxKSAvIDQ7CiAgICByZXR1cm4gYW5zOwp9CgppbnQgYW5zKGludCBsLCBpbnQgcikgewogICAgaWYgKGwgPiByKQogICAgICAgIHJldHVybiAwOwogICAgaW50IGMgPSBjbnQocikgLSBjbnQobC0xKTsKICAgIGludCBjMiA9IGNudDIocikgLSBjbnQyKGwtMSk7CiAgICAvLyBjb3V0IDw8IGMgIDw8ICcgJyA8PCBjMiA8PCBlbmRsOwogICAgcmV0dXJuIGMgKiAoYyAtIDEpIC8gMiArIGMyICogKGMyIC0gMSkgLyAyOwp9Ci8vIDAgMSAyIDAKCnZvaWQgc29sdmUoKSB7CiAgICBpbnQgbiwgeDsgY2luID4+IG4gPj4geDsKICAgIC8vIGNvdXQgPDwgY250KDUpIDw8ICcgJyA8PCBjbnQyKDUpIDw8IGVuZGw7CiAgICAvLyBjb3V0IDw8IGNudCgwKSA8PCAnICcgPDwgY250MigwKSA8PCBlbmRsOwogICAgLy8gY291dCA8PCBjbnQoNCkgPDwgJyAnIDw8IGNudDIoNCkgPDwgZW5kbDsKICAgIC8vIDAgMSAzIDAgNCAxCiAgICAvLyBjb3V0IDw8IGNudCg3KSA8PCAnICcgPDwgY250Mig3KSA8PCBlbmRsOwogICAgLy8gY291dCA8PCBjbnQoMCkgPDwgJyAnIDw8IGNudDIoMCkgPDwgZW5kbDsKICAgIC8vIGNvdXQgPDwgYW5zKDEsIHggLSAxKSA8PCBlbmRsOwogICAgLy8gY291dCA8PCBhbnMoeCArIDEsIG4pIDw8IGVuZGw7CiAgICBpbnQgcmVzID0gYW5zKDAsIG4pICUgTU9EOwogICAgLy8gY291dCA8PCBhbnMoMCwgbikgPDwgJyAnIDw8IGFucygyLCBuKSA8PCAnICcgPDwgYW5zKDAsIDApIDw8IGVuZGw7CiAgICByZXMgPSAocmVzIC0gYW5zKHgsIG4pICUgTU9EICsgTU9EKSAlIE1PRDsKICAgIHJlcyA9ICgocmVzIC0gYW5zKDAsIHggLSAxKSAlIE1PRCkgKyBNT0QpICUgTU9EOwogICAgY291dCA8PCByZXMgPDwgZW5kbDsKICAgIC8vIGludCBhbnMgPSAwOwogICAgLy8gZm9yIChpbnQgbCA9IDE7IGwgPD0geDsgbCsrKSB7CiAgICAvLyAgICAgZm9yIChpbnQgciA9IHg7IHIgPD0gbjsgcisrKSB7CiAgICAvLyAgICAgICAgIGlmICh4UmFuZ2UobCwgcikgPT0gMCkgewogICAgLy8gICAgICAgICAgICAgY291dCA8PCBsIDw8ICcgJyA8PCByIDw8IGVuZGw7CiAgICAvLyAgICAgICAgIH0KICAgIC8vICAgICB9CiAgICAvLyB9CiAgICAvLyBmb3IgKGludCBpID0gMDsgaSA8PSA4OyBpKyspIHsKICAgIC8vICAgICBjb3V0IDw8IGkgPDwgJyAnIDw8IHhvcmZyb21aZXJvVG9OKGkpIDw8IGVuZGw7CiAgICAvLyB9Cn0KCgpzaWduZWQgbWFpbigpIHsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOyAKICAgIGNpbi50aWUoTlVMTCk7IGNvdXQudGllKE5VTEwpOwogICAgLy8gI2lmbmRlZiBPTkxJTkVfSlVER0UgCiAgICAvLyAgICBmcmVvcGVuKCJpbnB1dC50eHQiLCAiciIsIHN0ZGluKTsgCiAgICAvLyAgICBmcmVvcGVuKCJvdXRwdXQudHh0IiwgInciLCBzdGRvdXQpOyAKICAgIC8vICNlbmRpZiAKICAgIGludCB0OyB0ID0gMTsKICAgIGNpbiA+PiB0OwogICAgd2hpbGUgKHQtLSkgc29sdmUoKTsKICAgIHJldHVybiAwOwp9Cg==