//求(l,r)内r<=10^12内只有一个素因子&&不是素数的个数
//则满足条件的素因子<=10^6 若素因子大于10^6则要么为素数要么含有另外一个<sqrt(x)的因子
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#include <cmath>
using namespace std;
typedef long long ll;
const int N=1e6;
vector<ll> p;
//10^12内只有一个素因子&&不是素数的数
//则该素因子<=10^6 若素因子大于10^6则要么为素数要么含有另外一个<sqrt(x)的因子
bool check(int k)
{
for(int i=2;i<=sqrt(k);i++)
{
if(k%i==0)
return false;
}
return true;
}
int main()
{
for(int i=2;i<=N;i++)
{
if(check(i))
{
p.push_back(i);
}
}
int t;
cin>>t;
while(t--)
{
ll l,r;
cin>>l>>r;
ll cnt=0;
// 时间复杂度为O(Nlog(N)) N=p.size()<1e6
for(int i=0;i<p.size();i++)//根据素因子更新
{
for(ll j=p[i]*p[i];j<=r;j*=p[i])//只含有一个素因子i的数j&&j在(l,r)内
{
if(j>=l)
cnt++;
}
}
cout<<cnt<<endl;
}
return 0;
}