/*
███████ ██ ██████ ██ ██ ██ ███████ █████
██ ██ ███ ███ ██ ██ ██ ██
███████ ██ ██ ███ ██ ███ ██ ██ ██ ███████
██ ██ ██ ██ ██ █ ██ ██ ██ ██ ██
███████ ██ ██████ ██ ██ ██ ██ ██ ██
*/
#include <bits/stdc++.h>
#include <string.h>
#include <cmath>
#include <iostream>
#include <set>
#include <iterator>
using namespace std;
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define ld long double
#define ll long long
#define int ll
#define int128 __int128
const ll MOD = 998244353 ;
const ll INF = 1e18 ;
#define rep(i,x,y) for(int i=(x);i<(y);i++)
inline ll mul(ll a1, ll a2) { return (((a1 * a2) % MOD + MOD ) % MOD ) ; }
inline ll add(ll a1, ll a2) { return (((a1 + a2) % MOD + MOD ) % MOD ); }
inline ll sub(ll a1, ll a2) { return ((a1 - a2 + MOD) % MOD); }
ll binpow(ll a,ll b) {
if(b==0) {
return 1;
}
if(b%2){
return (a*binpow(a,b-1))%MOD;
}
return binpow((a*a)%MOD,b/2);
}
const int MAX = 1e6 + 100 ;
vector<ll> smallestDiv;
void sieve() {
for(ll i = 0 ; i < MAX ; i ++) smallestDiv.push_back(i);
for (ll i = 2; i*i < MAX; i++) {
if (smallestDiv[i] != i) continue;
for (ll j = i*i; j < MAX; j+=i)
if (smallestDiv[j] == j) smallestDiv[j] = i;
}
}
map<int, int> dpf , dpcf;
int ah(int n) {
int k = 0;
while (n > 1) {
n /= 2 ;
k++;
}
return k;
}
int cf(int n) {
if (n == 0) return 0;
if (n == 1) return 1;
if (n == 2) return 3;
if (n == 3) return 2;
if (dpcf.count(n)) return dpcf[n];
int k = ah(n) ;
int x = n - (1LL << k);
int res = min(k + (1LL << k) - x, k + 1 + cf(x + 2));
dpcf[n] = res;
return res ;
}
int f(int n ) {
if (n < 0) return 0;
if (n == 0) return 0;
if (n == 1) return 1;
if (n == 2) return 4;
if (n == 3) return 6;
if (dpf.count(n)) return dpf[n];
int k = ah(n);
int x = n - (1LL << k) , p2 = 1LL << k;
int change = p2 ,l = 0, r = p2 - 1;
while (l <= r) {
int m = l + (r-l) / 2;
if (cf(m+2)+m >= p2-1) {
change = m;
r = m-1;
} else {
l = m+1;
}
}
int ans = f(p2 - 1);
if (x < change) {
int z = add ( mul(x+1,k+1) , sub(f(x+2),1) ) ;
ans = add(ans , z) ;
}else {
int z = add ( mul(change,k+1) , sub(f(change+1),1) ) ;
ans = add(ans , z) ;
int cnt = add(sub(x,change),1) ;
z = mul ( mul( add(change,x) , cnt) , mul ( add(MOD,1) , binpow(2,MOD-2) ) ) ;
int d = mul(cnt,add(k,p2)) ;
ans = add(ans,sub(d,z)) ;
}
dpf[n] = ans;
return ans ;
}
int32_t main() {
IOS ;
int test = 1 ;
cin >> test ;
while (test--) {
int l , r ; cin >> l >> r ;
int ans = sub(f(r),f(l-1)) ;
cout << ans << endl ;
}
return 0;
}
LyoKIOKWiOKWiOKWiOKWiOKWiOKWiOKWiCAg4paI4paIICAg4paI4paI4paI4paI4paI4paIICDilojiloggICAgIOKWiOKWiCAg4paI4paIICDilojilojilojilojilojilojiloggICDilojilojilojilojilogKIOKWiOKWiCAgICAgICAgICAg4paI4paIICAgICAgIOKWiOKWiOKWiCAgIOKWiOKWiOKWiCAg4paI4paIICAgICAgIOKWiOKWiCAg4paI4paIICAg4paI4paICiDilojilojilojilojilojilojiloggIOKWiOKWiCAg4paI4paIICDilojilojiloggIOKWiOKWiCDilojilojilogg4paI4paIICDilojiloggICAgICAg4paI4paIICDilojilojilojilojilojilojilogKICAgICAg4paI4paIICDilojiloggIOKWiOKWiCAgIOKWiOKWiCAg4paI4paIICDiloggIOKWiOKWiCAg4paI4paIICAgICAgIOKWiOKWiCAg4paI4paIICAg4paI4paICiDilojilojilojilojilojilojiloggIOKWiOKWiCAgIOKWiOKWiOKWiOKWiOKWiOKWiCAg4paI4paIICAgICDilojiloggIOKWiOKWiCAgICAgICDilojiloggIOKWiOKWiCAgIOKWiOKWiAoqLwojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8Y21hdGg+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHNldD4KI2luY2x1ZGUgPGl0ZXJhdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwojZGVmaW5lIElPUyBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IGNpbi50aWUoMCk7IGNvdXQudGllKDApOwojZGVmaW5lIGxkIGxvbmcgZG91YmxlCiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgaW50IGxsCiNkZWZpbmUgaW50MTI4IF9faW50MTI4CmNvbnN0IGxsIE1PRCA9IDk5ODI0NDM1MyA7CmNvbnN0IGxsIElORiA9IDFlMTggOwojZGVmaW5lIHJlcChpLHgseSkgZm9yKGludCBpPSh4KTtpPCh5KTtpKyspCmlubGluZSBsbCBtdWwobGwgYTEsIGxsIGEyKSB7IHJldHVybiAoKChhMSAqIGEyKSAlIE1PRCArIE1PRCApICUgTU9EICkgOyB9CmlubGluZSBsbCBhZGQobGwgYTEsIGxsIGEyKSB7IHJldHVybiAoKChhMSArIGEyKSAlIE1PRCArIE1PRCApICUgTU9EICk7IH0KaW5saW5lIGxsIHN1YihsbCBhMSwgbGwgYTIpIHsgcmV0dXJuICAoKGExIC0gYTIgKyBNT0QpICUgTU9EKTsgfQpsbCBiaW5wb3cobGwgYSxsbCBiKSB7CiAgICBpZihiPT0wKSB7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CiAgICBpZihiJTIpewogICAgICAgIHJldHVybiAoYSpiaW5wb3coYSxiLTEpKSVNT0Q7CiAgICB9CiAgICByZXR1cm4gYmlucG93KChhKmEpJU1PRCxiLzIpOwp9CmNvbnN0IGludCBNQVggPSAxZTYgKyAxMDAgOwp2ZWN0b3I8bGw+IHNtYWxsZXN0RGl2Owp2b2lkIHNpZXZlKCkgewogICAgZm9yKGxsIGkgPSAgMCA7IGkgPCBNQVggOyBpICsrKSBzbWFsbGVzdERpdi5wdXNoX2JhY2soaSk7CiAgICBmb3IgKGxsIGkgPSAyOyBpKmkgPCBNQVg7IGkrKykgewogICAgICAgIGlmIChzbWFsbGVzdERpdltpXSAhPSBpKSBjb250aW51ZTsKICAgICAgICBmb3IgKGxsIGogPSBpKmk7IGogPCBNQVg7IGorPWkpCiAgICAgICAgICAgIGlmIChzbWFsbGVzdERpdltqXSA9PSBqKSBzbWFsbGVzdERpdltqXSA9IGk7CiAgICB9Cn0KbWFwPGludCwgaW50PiBkcGYgLCBkcGNmOwoKaW50IGFoKGludCBuKSB7CiAgICBpbnQgayA9IDA7CiAgICB3aGlsZSAobiA+IDEpIHsKICAgICAgICBuIC89IDIgOwogICAgICAgIGsrKzsKICAgIH0KICAgIHJldHVybiBrOwp9CgppbnQgY2YoaW50IG4pIHsKICAgIGlmIChuID09IDApIHJldHVybiAwOwogICAgaWYgKG4gPT0gMSkgcmV0dXJuIDE7CiAgICBpZiAobiA9PSAyKSByZXR1cm4gMzsKICAgIGlmIChuID09IDMpIHJldHVybiAyOwogICAgaWYgKGRwY2YuY291bnQobikpIHJldHVybiBkcGNmW25dOwogICAgaW50IGsgPSBhaChuKSA7CiAgICBpbnQgeCA9IG4gLSAoMUxMIDw8IGspOwogICAgaW50IHJlcyA9IG1pbihrICsgKDFMTCA8PCBrKSAtIHgsIGsgKyAxICsgY2YoeCArIDIpKTsKICAgIGRwY2Zbbl0gPSByZXM7CiAgICByZXR1cm4gcmVzIDsKfQppbnQgZihpbnQgbiApIHsKICAgIGlmIChuIDwgMCkgcmV0dXJuIDA7CiAgICBpZiAobiA9PSAwKSByZXR1cm4gMDsKICAgIGlmIChuID09IDEpIHJldHVybiAxOwogICAgaWYgKG4gPT0gMikgcmV0dXJuIDQ7CiAgICBpZiAobiA9PSAzKSByZXR1cm4gNjsKICAgIGlmIChkcGYuY291bnQobikpIHJldHVybiBkcGZbbl07CiAgICBpbnQgayA9IGFoKG4pOwogICAgaW50IHggPSBuIC0gKDFMTCA8PCBrKSAsIHAyID0gMUxMIDw8IGs7CiAgICBpbnQgY2hhbmdlID0gcDIgLGwgPSAwLCByID0gcDIgLSAxOwogICAgd2hpbGUgKGwgPD0gcikgewogICAgICAgIGludCBtID0gbCArIChyLWwpIC8gMjsKICAgICAgICBpZiAoY2YobSsyKSttID49IHAyLTEpIHsKICAgICAgICAgICAgY2hhbmdlID0gbTsKICAgICAgICAgICAgciA9IG0tMTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBsID0gbSsxOwogICAgICAgIH0KICAgIH0KICAgIGludCBhbnMgPSBmKHAyIC0gMSk7CiAgICBpZiAoeCA8IGNoYW5nZSkgewogICAgICAgIGludCB6ID0gYWRkICggbXVsKHgrMSxrKzEpICwgc3ViKGYoeCsyKSwxKSApICA7CiAgICAgICAgYW5zID0gYWRkKGFucyAsIHopIDsKICAgIH1lbHNlIHsKICAgICAgICBpbnQgeiA9IGFkZCAoIG11bChjaGFuZ2UsaysxKSAsIHN1YihmKGNoYW5nZSsxKSwxKSApICA7CiAgICAgICAgYW5zID0gYWRkKGFucyAsIHopIDsKICAgICAgICBpbnQgY250ID0gYWRkKHN1Yih4LGNoYW5nZSksMSkgOwogICAgICAgIHogPSBtdWwgKCBtdWwoIGFkZChjaGFuZ2UseCkgLCBjbnQpICwgbXVsICggYWRkKE1PRCwxKSAsIGJpbnBvdygyLE1PRC0yKSApICkgOwogICAgICAgIGludCBkID0gbXVsKGNudCxhZGQoayxwMikpIDsKICAgICAgICBhbnMgPSBhZGQoYW5zLHN1YihkLHopKSA7CiAgICB9CiAgICBkcGZbbl0gPSBhbnM7CiAgICByZXR1cm4gYW5zIDsKfQoKCgppbnQzMl90IG1haW4oKSB7CiAgICBJT1MgOwogICAgaW50IHRlc3QgPSAxIDsKICAgIGNpbiA+PiB0ZXN0IDsKICAgIHdoaWxlICh0ZXN0LS0pIHsKICAgICAgICBpbnQgbCAsIHIgOyBjaW4gPj4gbCA+PiByIDsKICAgICAgICBpbnQgYW5zID0gc3ViKGYociksZihsLTEpKSA7CiAgICAgICAgY291dCA8PCBhbnMgPDwgZW5kbCA7CiAgICB9CiAgICByZXR1cm4gMDsKfQ==