WA10pts
#include<bits/stdc++.h>
#define int long long
#define N 1000009
using namespace std;
int n,primes[N],cnt,mu[N],ans,l,r,become[N];
bool st[N];
void init(int n){
mu[1]=1;
for(int i=2;i<=n;i++){
if(!st[i]){
primes[++cnt]=i;
}
for(int j=1;j<=cnt&&primes[j]*i<=n;j++){
st[primes[j]*i]=1;
if(i%primes[j]==0){
break;
}
}
}
}
inline int from(int n,int mod){
return n%mod==0?n:n+(mod-n%mod);
}
inline int to(int n,int mod){
return n%mod==0?n:n-n%mod;
}
long long ksc(long long a,long long b,long long m)
{
return (a*b-(long long)((long double)a/m*b)*m+m)%m;
}
int ksm(int a,int b,int mod){
if(b==0){
return 1%mod;
}
int now=ksm(a,b/2,mod);
if(b%2==1){
return ksc(ksc(now,now,mod),a,mod);
}
return ksc(now,now,mod);
}
bool test(int a,int b){
int b1=b-1,num=0;
while(b1%2==0){
b1/=2;
num++;
}
int x1=ksm(a,b1,b),x2;
for(int i=1;i<=num;i++){
x2=ksc(x1,2,b);
if(x2==1&&x1!=1&&x1!=b-1){
return 0;
}
x1=x2;
}
if(x1==1){
return 1;
}
return 0;
}
bool miller_rabin(int n){
if(n<2){
return 0;
}
if(n==2){
return 1;
}
if(n%2==0){
return 0;
}
for(int i=1;i<=10;i++){
int a=rand()%(n-1)+1;
if(!test(a,n)){
return 0;
}
}
return 1;
}
signed main(){
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
init(1000000);
cin>>l>>r;
for(int i=l;i<=r;i++){
become[i-l]=i;
mu[i-l]=1;
}
for(int i=1;i<=cnt;i++){
int x=primes[i];
for(int j=from(l,x);j<=to(r,x);j+=x){
int len=0;
while(become[j-l]%x==0){
become[j-l]/=x;
len++;
}
if(len>1){
mu[j-l]=0;
}
else mu[j-l]=-mu[j-l];
}
}
for(int i=l;i<=r;i++){
if(become[i-l]==1){
ans+=mu[i-l];
}
else{
if(miller_rabin(become[i-l])){
ans+=-mu[i-l];
}
else{
int now=sqrt(become[i-l]);
if(now*now!=become[i-l]){
ans+=mu[i-l];
}
}
}
}
cout<<ans;
return 0;
}