#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef double lf; typedef long double Lf; typedef pair pii; typedef pair pll; #define TRACE(x) cerr << #x << " " << x << endl #define FOR(i, a, b) for (int i = (a); i < int(b); i++) #define REP(i, n) FOR(i, 0, n) #define all(x) (x).begin(), (x).end() #define _ << " " << #define fi first #define sec second #define mp make_pair const int MOD = 1e9+7; int add(int x, int y) { x += y; if (x >= MOD) x -= MOD; return x; } int mul(int x, int y) { return (ll)x * y % MOD; } void solve() { int a, b; scanf("%d %d",&a,&b); int pot = 1; ll sol = 0; while (pot < a) pot *= 2; if (pot > b) { int x = b - a + 1; int y = b - a + 2; if (x % 2) y /= 2; else x /= 2; printf("%d\n",mul(x, y)); return; } int l = pot - a; int l1 = l + 1; if (l % 2) l1 /= 2; else l /= 2; sol = add(sol, mul(l, l1)); int last = pot; if (pot * 2 > b) { int x = b - pot + 1; int y = b - pot + 2; if (x % 2) y /= 2; else x /= 2; sol = add(sol, mul(x, y)); printf("%lld\n",sol); return; } pot *= 2; while (pot <= b) { l = pot - last; l1 = l + 1; if (l % 2) l1 /= 2; else l /= 2; sol = add(sol, mul(l, l1)); last = pot; pot *= 2; } int x = b - last + 1; int y = b - last + 2; if (x % 2) y /= 2; else x /= 2; sol = add(sol, mul(x, y)); printf("%lld\n",sol); } int main() { int t; scanf("%d",&t); REP(i, t) solve(); return 0; }