#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define nl "\n"
#define vi vector<int>
#define all(v) v.begin(), v.end()
#define SORT(v) sort(all(v))
#define SORTX(v) sort(v.begin(), v.end(), greater<int>())
#define read(a) for (auto &i : a) cin >> i
#define Printv(a) for (auto &i : a) cout << i << " "
#define pii pair<int, int>
#define M_ShahaT ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
void FIO(){
#ifndef ONLINE_JUDGE
freopen("Input.txt","r",stdin);
freopen("Output.txt","w",stdout);
#endif
}
int dx[] = {1, 0, -1, 0, -1, -1, 1, 1};
int dy[] = {0, -1, 0, 1, -1, 1, -1, 1};
char di[] = {'D', 'L', 'U', 'R'};
double const PI=acos(-1);
const ll INF = 1e18;
const ll mod=1e9+7;
const int N = 2e6 + 5;
int f_1_to_n(int n){
return n*(n+1)/2;
}
bool valid(int x,int y,int row ,int col){
return x<row&&x>=0&&y<col&&y>=0;
}
vector<bool>vis(N);
vector<int>prime;
void sieve(){
for(int i=2;i<N;i++){
if(!vis[i]){
prime.push_back(i);
for(int j = i;j<=N;j+=i){
vis[j]=true;
}
}
}
}
vector<int>pre;
int binary(int n){
return lower_bound(prime.begin(), prime.end(), n) - prime.begin();
}
void solve_case() {
int a,b;cin>>a>>b;
int inda= binary(a);
int indb= binary(b);
cout << pre[indb] - pre[inda - 1];
}
int main(){
M_ShahaT
FIO();
int t=1;
sieve();
pre.assign(prime.size(),0);
for(int i=3;i<prime.size();i++){
if(abs(prime[i-3]-prime[i-2])==2 && abs(prime[i]-prime[i-1])==4){
pre[i]=pre[i-1]+1;
}else if(abs(prime[i-3]-prime[i-2])==4 && abs(prime[i]-prime[i-1])==2){
pre[i]=pre[i-1]+1;
}else {
pre[i]=pre[i-1];
}
}
cin >> t;
for(int i=1;i<=t;i++){
solve_case();
cout<<nl;
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIG5sICJcbiIKI2RlZmluZSB2aSB2ZWN0b3I8aW50PgojZGVmaW5lIGFsbCh2KSB2LmJlZ2luKCksIHYuZW5kKCkKI2RlZmluZSBTT1JUKHYpIHNvcnQoYWxsKHYpKQojZGVmaW5lIFNPUlRYKHYpIHNvcnQodi5iZWdpbigpLCB2LmVuZCgpLCBncmVhdGVyPGludD4oKSkKI2RlZmluZSByZWFkKGEpIGZvciAoYXV0byAmaSA6IGEpIGNpbiA+PiBpCiNkZWZpbmUgUHJpbnR2KGEpIGZvciAoYXV0byAmaSA6IGEpIGNvdXQgPDwgaSA8PCAiICIKI2RlZmluZSBwaWkgcGFpcjxpbnQsIGludD4KI2RlZmluZSBNX1NoYWhhVCBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CgoKdm9pZCBGSU8oKXsKI2lmbmRlZiBPTkxJTkVfSlVER0UKICAgIGZyZW9wZW4oIklucHV0LnR4dCIsInIiLHN0ZGluKTsKICAgIGZyZW9wZW4oIk91dHB1dC50eHQiLCJ3IixzdGRvdXQpOwojZW5kaWYKfQppbnQgZHhbXSA9IHsxLCAwLCAtMSwgMCwgLTEsIC0xLCAxLCAxfTsKaW50IGR5W10gPSB7MCwgLTEsIDAsIDEsIC0xLCAxLCAtMSwgMX07CmNoYXIgZGlbXSA9IHsnRCcsICdMJywgJ1UnLCAnUid9Owpkb3VibGUgY29uc3QgUEk9YWNvcygtMSk7CmNvbnN0IGxsIElORiA9IDFlMTg7CmNvbnN0IGxsIG1vZD0xZTkrNzsKY29uc3QgaW50IE4gPSAyZTYgKyA1OwppbnQgZl8xX3RvX24oaW50IG4pewogICAgcmV0dXJuIG4qKG4rMSkvMjsKfQpib29sIHZhbGlkKGludCB4LGludCB5LGludCByb3cgLGludCBjb2wpewogICAgcmV0dXJuIHg8cm93JiZ4Pj0wJiZ5PGNvbCYmeT49MDsKfQoKCgoKCgoKdmVjdG9yPGJvb2w+dmlzKE4pOwogICAgICAgIHZlY3RvcjxpbnQ+cHJpbWU7CnZvaWQgc2lldmUoKXsKICAgIGZvcihpbnQgaT0yO2k8TjtpKyspewppZighdmlzW2ldKXsKICAgIHByaW1lLnB1c2hfYmFjayhpKTsKZm9yKGludCBqID0gaTtqPD1OO2orPWkpewogICAgdmlzW2pdPXRydWU7Cn0KfQp9Cn0KCnZlY3RvcjxpbnQ+cHJlOwoKCgppbnQgYmluYXJ5KGludCBuKXsKCiAgICAgICAgcmV0dXJuIGxvd2VyX2JvdW5kKHByaW1lLmJlZ2luKCksIHByaW1lLmVuZCgpLCBuKSAtIHByaW1lLmJlZ2luKCk7Cgp9CgoKCgoKdm9pZCBzb2x2ZV9jYXNlKCkgewppbnQgYSxiO2Npbj4+YT4+YjsKaW50IGluZGE9IGJpbmFyeShhKTsKaW50IGluZGI9IGJpbmFyeShiKTsKICAgICAgICBjb3V0IDw8IHByZVtpbmRiXSAtIHByZVtpbmRhIC0gMV07Cn0KCgoKCgoKCgoKCgoKCgoKCgppbnQgbWFpbigpewogICAgTV9TaGFoYVQKICAgIEZJTygpOwoKICAgIGludCB0PTE7CnNpZXZlKCk7CnByZS5hc3NpZ24ocHJpbWUuc2l6ZSgpLDApOwogICAgZm9yKGludCBpPTM7aTxwcmltZS5zaXplKCk7aSsrKXsKaWYoYWJzKHByaW1lW2ktM10tcHJpbWVbaS0yXSk9PTIgJiYgYWJzKHByaW1lW2ldLXByaW1lW2ktMV0pPT00KXsKICAgIHByZVtpXT1wcmVbaS0xXSsxOwp9ZWxzZSBpZihhYnMocHJpbWVbaS0zXS1wcmltZVtpLTJdKT09NCAmJiBhYnMocHJpbWVbaV0tcHJpbWVbaS0xXSk9PTIpewogICAgcHJlW2ldPXByZVtpLTFdKzE7Cn1lbHNlIHsKcHJlW2ldPXByZVtpLTFdOwp9CiAgICB9CmNpbiA+PiB0OwogICAgZm9yKGludCBpPTE7aTw9dDtpKyspewoKICAgICAgICBzb2x2ZV9jYXNlKCk7CiAgICAgICAgY291dDw8bmw7CiAgICB9CiAgICByZXR1cm4gMDsKfQ==