#7.8.10.11 RE
#include<bits/stdc++.h>
using namespace std;
const int M=50000;
int l,r,p,sum,b[50005];
bool a[1000005];
void prime(){ //质数筛
for(int i=2;i*i<=M;i++){
if(!a[i]){
for(int j=i*i;j<=M;j+=i){
a[j]=true;
}
}
}
for(int i=2;i<=M;i++){
if(!a[i]){
p++;
b[p]=i;
}
}
}
void f(){ //选出大于r的最小质数在第几个
for(int i=1;i<=p;i++){
if(b[i]>=r){
p=i;
break;
}
}
}
int main(){
cin>>l>>r;
prime();
memset(a,0,sizeof(a));
f();
for(int i=1;i<=p;i++){
int L; //
if(b[i]>=l){ //
L=b[i]*2; //
}else{ //
int x=l/b[i]; //
L=(x+1)*b[i]; //
} //算出大于l的最小的b[i]的倍数
for(int j=L;j<=r;j+=b[i]){
a[j-l+1]=true;
}
}
for(int i=1;i<=r-l+1;i++){
if(!a[i]){
sum++;
}
}
cout<<sum-1;
return 0;
}