#include <bits/stdc++.h>
using namespace std;
const long long inf = 1e18;
const long long inn = 1e6;
const long long inx = 1e9;
const long long mx = 1e7 + 7;
long long tot;
long long su[mx];
long long po(long long a, long long b) {
  long long st = 1;
  while (b) {
    if (b & 1) st *= a;
    a *= a;
    b >>= 1;
  }
  return st;
}
void init() {
  tot = 0;
  for (long long i = 1; i <= inn; ++i) {
    long long sq = sqrt((double)i);
    if (i == sq * sq) continue;
    for (long long j = 3; po(i, j - 2) <= inf / (i * i); j += 2) {
      su[tot++] = po(i, j);
    }
  }
  sort(su, su + tot);
  tot = unique(su, su + tot) - su;
}
long long su2(long long a) {
  long long l = 1, r = inx, ans = inx + 1;
  while (l <= r) {
    long long mid = (l + r) >> 1;
    if (mid * mid >= a) {
      ans = mid;
      r = mid - 1;
    } else
      l = mid + 1;
  }
  return ans;
}
long long su3(long long a) {
  long long l = 0, r = tot - 1, ans = tot;
  while (l <= r) {
    long long mid = (l + r) >> 1;
    if (su[mid] >= a) {
      ans = mid;
      r = mid - 1;
    } else
      l = mid + 1;
  }
  return ans;
}
int main() {
  int q;
  long long l, r;
  init();
  scanf("%d", &q);
  while (q--) {
    scanf("%lld%lld", &l, &r);
    long long sl2 = su2(l), sr2 = su2(r), sum;
    if (sr2 * sr2 == r) sr2++;
    sum = sr2 - sl2;
    sl2 = su3(l), sr2 = su3(r);
    if (su[sr2] == r) sr2++;
    sum += sr2 - sl2;
    printf("%lld\n", sum);
  }
}
