#include <bits/stdc++.h>
using namespace std;
long long Sqrt(long long x) {
  if (x == 1) return 1;
  long long l = max(sqrt(x) - 1, 1.0);
  while (l * l <= x) ++l;
  --l;
  return l;
}
int main() {
  set<long long> s;
  for (long long i = 2; i <= 1000000; ++i) {
    long long p = i * i;
    while ((double)p * i <= 1e18 + 100) {
      p *= i;
      s.insert(p);
    }
  }
  vector<long long> v(s.begin(), s.end());
  s.clear();
  for (int i = 0; i < v.size(); ++i) {
    long long z = Sqrt(v[i]);
    if (z * z == v[i]) {
      v[i] = v.back();
      v.pop_back();
      --i;
    }
  }
  sort(v.begin(), v.end());
  int q;
  scanf("%d", &q);
  while (q--) {
    long long l, r;
    scanf("%lld%lld", &l, &r);
    int res =
        upper_bound(v.begin(), v.end(), r) - lower_bound(v.begin(), v.end(), l);
    long long a = Sqrt(l);
    long long b = Sqrt(r);
    if (a * a < l) ++a;
    if (a <= b) res += b - a + 1;
    printf("%d\n", res);
  }
  return 0;
}
