#include <bits/stdc++.h>
#define ll long long
#define db double
#define pii pair<int, int>
#define vi vector<int>
#define IOS ios_base::sync_with_stdio(false); cin.tie(NULL)
//pairs
#define fs first
#define se second
//vectors
#define pb push_back
#define pf push_front
//loops
#define FOR(i, a, b) for(int i=(int)a;i<=(int)b;++i)
#define ROF(i, a, b) for(int i=(int)a;i>=(int)b;i--)
#define rep(a, x) for(auto& a : x)
#define cc '\n'
//file
#define file(name) if (fopen(name".inp", "r")) freopen(name".inp", "r", stdin), freopen(name".out", "w", stdout)
#define TIME (1.0 * clock() / CLOCKS_PER_SEC)
using namespace std;
const int maxn = 5*1e3+7;
const ll INF = 1e6;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ll F[INF+1];
ll s[7] = {2,3,5,7,11,13,17};
map <ll, vector<ll>>MP;
void init() {
for (int i = 1; i <= INF; i++) F[i] = 1;
for( auto p: s){
for (int j = p; j <= INF; j += p) {
F[j] *= p;
// MP[F[j]].pb(j);
}
}
for (int i = 1; i <= INF; i++) {
MP[F[i]].pb(i);
}
}
void solve()
{
ll a, b; cin >> a >> b;
ll res = 0;
for(auto &k : MP) {
auto &vec = k.second;
auto l = lower_bound(vec.begin(), vec.end(), a);
auto r = upper_bound(vec.begin(), vec.end(), b);
ll n = r-l;
//if (n !=0 ) cout << k.first << " " << n << cc;
res += n*(n-1)/2;
}
cout << res << cc;
}
int main() {
IOS;
file("PRIME");
init();
int T; cin >> T;
while(T--) {
solve();
}
cerr << "Time : " << TIME << " ";
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiAKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBkYiBkb3VibGUKIAojZGVmaW5lIHBpaSBwYWlyPGludCwgaW50PgogCiNkZWZpbmUgdmkgdmVjdG9yPGludD4KI2RlZmluZSBJT1MgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IGNpbi50aWUoTlVMTCkKIAovL3BhaXJzCiNkZWZpbmUgZnMgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKIAovL3ZlY3RvcnMKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBwZiBwdXNoX2Zyb250CiAKLy9sb29wcwojZGVmaW5lIEZPUihpLCBhLCBiKSBmb3IoaW50IGk9KGludClhO2k8PShpbnQpYjsrK2kpCiNkZWZpbmUgUk9GKGksIGEsIGIpIGZvcihpbnQgaT0oaW50KWE7aT49KGludCliO2ktLSkKI2RlZmluZSByZXAoYSwgeCkgZm9yKGF1dG8mIGEgOiB4KQojZGVmaW5lIGNjICdcbicKIAovL2ZpbGUKI2RlZmluZSBmaWxlKG5hbWUpIGlmIChmb3BlbihuYW1lIi5pbnAiLCAiciIpKSBmcmVvcGVuKG5hbWUiLmlucCIsICJyIiwgc3RkaW4pLCBmcmVvcGVuKG5hbWUiLm91dCIsICJ3Iiwgc3Rkb3V0KQojZGVmaW5lIFRJTUUgKDEuMCAqIGNsb2NrKCkgLyBDTE9DS1NfUEVSX1NFQykKIAp1c2luZyBuYW1lc3BhY2Ugc3RkOwogCmNvbnN0IGludCBtYXhuID0gNSoxZTMrNzsKY29uc3QgbGwgSU5GID0gMWU2OwogCi8vfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5cCi8vfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CmxsIEZbSU5GKzFdOwpsbCBzWzddID0gezIsMyw1LDcsMTEsMTMsMTd9OwptYXAgPGxsLCB2ZWN0b3I8bGw+Pk1QOwp2b2lkIGluaXQoKSB7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBJTkY7IGkrKykgRltpXSA9IDE7CiAKICAgIGZvciggYXV0byBwOiBzKXsKICAgICAgICAgICAgZm9yIChpbnQgaiA9IHA7IGogPD0gSU5GOyBqICs9IHApIHsKICAgICAgICAgICAgICAgIEZbal0gKj0gcDsgCiAgICAgICAgICAgICAgICAvLyBNUFtGW2pdXS5wYihqKTsKICAgICAgICAgICAgfQogICAgfQogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gSU5GOyBpKyspIHsKICAgICAgICBNUFtGW2ldXS5wYihpKTsKICAgIH0KfQogCnZvaWQgc29sdmUoKSAKewogICAgbGwgYSwgYjsgY2luID4+IGEgPj4gYjsKIAogICAgbGwgcmVzID0gMDsKIAogICAgZm9yKGF1dG8gJmsgOiBNUCkgewogICAgICAgIGF1dG8gJnZlYyA9IGsuc2Vjb25kOwogICAgICAgIGF1dG8gbCA9IGxvd2VyX2JvdW5kKHZlYy5iZWdpbigpLCB2ZWMuZW5kKCksIGEpOwogICAgICAgIGF1dG8gciA9IHVwcGVyX2JvdW5kKHZlYy5iZWdpbigpLCB2ZWMuZW5kKCksIGIpOwogCiAgICAgICBsbCBuID0gci1sOwogICAgICAgLy9pZiAobiAhPTAgKSBjb3V0IDw8IGsuZmlyc3QgPDwgIiAiIDw8IG4gPDwgY2M7CiAgICAgICByZXMgKz0gbioobi0xKS8yOwogICAgfQogICAgY291dCA8PCByZXMgPDwgY2M7Cn0KIAppbnQgbWFpbigpIHsKICAgIElPUzsKICAgIGZpbGUoIlBSSU1FIik7CiAKICAgIGluaXQoKTsKICAgIGludCBUOyBjaW4gPj4gVDsKICAgIHdoaWxlKFQtLSkgewogICAgICAgIHNvbHZlKCk7CiAgICB9CiAKIGNlcnIgPDwgIlRpbWUgOiAiIDw8IFRJTUUgPDwgIiAiOwp9