#include <bits/stdc++.h>
using namespace std;
long long maxn = 1e18;
vector<long long> v;
long long f(long long x) {
  if (!x) return 0;
  return upper_bound(v.begin(), v.end(), x) - v.begin() + sqrt(x);
}
int main() {
  for (long long i = 2; i * i * i <= maxn; ++i) {
    long long j = i * i;
    while (j <= maxn / i) {
      j *= i;
      long long s = sqrt(j);
      if (s * s != j) v.emplace_back(j);
    }
  }
  sort(v.begin(), v.end());
  v.erase(unique(v.begin(), v.end()), v.end());
  int q;
  scanf("%d", &q);
  while (q--) {
    long long l, r;
    scanf("%lld%lld", &l, &r);
    printf("%lld\n", f(r) - f(l - 1));
  }
  return 0;
}
