#include <bits/stdc++.h>
using namespace std;
const int maxn = 35;
int pw[maxn], L[maxn], R[maxn];
long long f[maxn][2][2][2][2];
int main() {
  int T;
  scanf("%d", &T);
  for (int(i) = (0); (i) <= ((31) - 1); (i)++) pw[i] = 1 << i;
  while (T--) {
    int l, r;
    scanf("%d%d", &l, &r);
    memset(L, 0, sizeof(L));
    memset(R, 0, sizeof(R));
    memset(f, 0, sizeof(f));
    f[31][0][0][0][0] = 1;
    for (int(i) = (0); (i) <= ((31) - 1); (i)++)
      L[i] = (l >> i) & 1, R[i] = (r >> i) & 1;
    for (int(i) = (31); (i) >= (1); (i)--)
      for (int(sa) = (0); (sa) <= ((2) - 1); (sa)++)
        for (int(la) = (0); (la) <= ((2) - 1); (la)++)
          for (int(sb) = (0); (sb) <= ((2) - 1); (sb)++)
            for (int(lb) = (0); (lb) <= ((2) - 1); (lb)++) {
              int nxt = i - 1;
              for (int(a) = (0); (a) <= ((2) - 1); (a)++)
                for (int(b) = (0); (b) <= ((2) - 1); (b)++) {
                  if (a && b) continue;
                  if (!sa && a && !R[nxt]) continue;
                  if (!sb && b && !R[nxt]) continue;
                  if (!la && !a && L[nxt]) continue;
                  if (!lb && !b && L[nxt]) continue;
                  if (!a && !b) {
                    bool nsa = sa | R[nxt], nsb = sb | R[nxt];
                    f[nxt][nsa][la][nsb][lb] += f[i][sa][la][sb][lb];
                  } else if (a) {
                    bool nsb = sb | R[nxt], nla = la | (!L[nxt]);
                    f[nxt][sa][nla][nsb][lb] += f[i][sa][la][sb][lb];
                  } else {
                    bool nsa = sa | R[nxt], nlb = lb | (!L[nxt]);
                    f[nxt][nsa][la][sb][nlb] += f[i][sa][la][sb][lb];
                  }
                }
            }
    long long ans = 0;
    for (int(sa) = (0); (sa) <= ((2) - 1); (sa)++)
      for (int(la) = (0); (la) <= ((2) - 1); (la)++)
        for (int(sb) = (0); (sb) <= ((2) - 1); (sb)++)
          for (int(lb) = (0); (lb) <= ((2) - 1); (lb)++)
            ans += f[0][sa][la][sb][lb];
    printf("%lld\n", ans);
  }
}
