#include<bits/stdc++.h>
#define f1(i, n) for(ll i=1;i<=n;++i)
#define f0(i, n) for(ll i=0;i<n;++i)
#define ull unsigned long long
#define ll long long
#define rev(a) reverse(a.begin(),a.end())
#define all(x) x.begin(),x.end()
#define so(A, n) sort(A+1, A+n+1)
using namespace std;
const int N = 1e6;
bool checkPrime(int n) {
if (n == 0 || n == 1) return false;
for (int i = 2; i <= sqrt(n); ++i) if (n % i == 0) return false;
return true;
}
vector<int> prime;
int pre[N + 5];
bool mark[N + 5], isPrime[N + 5];
void sieve() {
fill(isPrime, isPrime + N, true);
isPrime[0] = isPrime[1] = false;
for (int i = 2; i * i < N; ++i) {
if (isPrime[i]) {
for (int j = i * i; j < N; j += i)
isPrime[j] = false;
}
}
for (int i = 2; i < N; ++i) {
if (isPrime[i]) prime.push_back(i);
}
}
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
sieve();
int cnt = 0;
for (int i = 0; i < prime.size(); ++i) {
for (int j = i; j < prime.size(); ++j) {
ll motcaigiday = 1ll * prime[i] * prime[j];
if (motcaigiday <= N) {
mark[motcaigiday] = true;
}
else{
break;
}
}
}
pre[0] = 0;
for (int i = 1; i <= N; ++i) {
if (mark[i]) {
pre[i] = pre[i - 1] + 1;
}
else {
pre[i] = pre[i - 1];
}
}
int t;
cin >> t;
int a, b;
while (t--) {
cin >> a >> b;
cout << pre[b] - pre[a - 1] << endl;
}
}
/*
*/
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBmMShpLCBuKSBmb3IobGwgaT0xO2k8PW47KytpKQojZGVmaW5lIGYwKGksIG4pIGZvcihsbCBpPTA7aTxuOysraSkKI2RlZmluZSB1bGwgdW5zaWduZWQgbG9uZyBsb25nCiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgcmV2KGEpIHJldmVyc2UoYS5iZWdpbigpLGEuZW5kKCkpCiNkZWZpbmUgYWxsKHgpIHguYmVnaW4oKSx4LmVuZCgpCiNkZWZpbmUgc28oQSwgbikgc29ydChBKzEsIEErbisxKQp1c2luZyBuYW1lc3BhY2Ugc3RkOwpjb25zdCBpbnQgTiA9IDFlNjsKYm9vbCBjaGVja1ByaW1lKGludCBuKSB7CiAgICBpZiAobiA9PSAwIHx8IG4gPT0gMSkgcmV0dXJuIGZhbHNlOwogICAgZm9yIChpbnQgaSA9IDI7IGkgPD0gc3FydChuKTsgKytpKSBpZiAobiAlIGkgPT0gMCkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHRydWU7Cn0KdmVjdG9yPGludD4gcHJpbWU7CmludCBwcmVbTiArIDVdOwpib29sIG1hcmtbTiArIDVdLCBpc1ByaW1lW04gKyA1XTsKdm9pZCBzaWV2ZSgpIHsKICAgIGZpbGwoaXNQcmltZSwgaXNQcmltZSArIE4sIHRydWUpOwogICAgaXNQcmltZVswXSA9IGlzUHJpbWVbMV0gPSBmYWxzZTsKICAgIGZvciAoaW50IGkgPSAyOyBpICogaSA8IE47ICsraSkgewogICAgICAgIGlmIChpc1ByaW1lW2ldKSB7CiAgICAgICAgICAgIGZvciAoaW50IGogPSBpICogaTsgaiA8IE47IGogKz0gaSkKICAgICAgICAgICAgICAgIGlzUHJpbWVbal0gPSBmYWxzZTsKICAgICAgICB9CiAgICB9CiAgICBmb3IgKGludCBpID0gMjsgaSA8IE47ICsraSkgewogICAgICAgIGlmIChpc1ByaW1lW2ldKSBwcmltZS5wdXNoX2JhY2soaSk7CiAgICB9Cn0KaW50IG1haW4oKQp7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKICAgIHNpZXZlKCk7CiAgICBpbnQgY250ID0gMDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJpbWUuc2l6ZSgpOyArK2kpIHsKICAgICAgICBmb3IgKGludCBqID0gaTsgaiA8IHByaW1lLnNpemUoKTsgKytqKSB7CiAgICAgICAgICAgIGxsIG1vdGNhaWdpZGF5ID0gMWxsICogcHJpbWVbaV0gKiBwcmltZVtqXTsKICAgICAgICAgICAgaWYgKG1vdGNhaWdpZGF5IDw9IE4pIHsKICAgICAgICAgICAgICAgIG1hcmtbbW90Y2FpZ2lkYXldID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlewogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBwcmVbMF0gPSAwOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gTjsgKytpKSB7CiAgICAgICAgaWYgKG1hcmtbaV0pIHsKICAgICAgICAgICAgcHJlW2ldID0gcHJlW2kgLSAxXSArIDE7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBwcmVbaV0gPSBwcmVbaSAtIDFdOwogICAgICAgIH0KICAgIH0KICAgIGludCB0OwogICAgY2luID4+IHQ7CiAgICBpbnQgYSwgYjsKICAgIHdoaWxlICh0LS0pIHsKICAgICAgICBjaW4gPj4gYSA+PiBiOwogICAgICAgIGNvdXQgPDwgcHJlW2JdIC0gcHJlW2EgLSAxXSA8PCBlbmRsOwogICAgfQoKCgoKCn0KLyoKCgoqLw==