#include<bits/stdc++.h>
#define ll long long
using namespace std;
inline int read(){
char ch=getchar();int x=0,f=1;
while(ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=getchar();}
while('0'<=ch&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
const int N=1e6+5;
const ll mod=666623333;
ll v[N],prime[N];
int quickpow(int a,int b){
int cnt=1;
while(b){
if(b%2==1)cnt=(1ll*cnt*a)%mod;
a=(1ll*a*a)%mod;
b/=2;
}
return cnt;
}
vector<ll>q[N];
int main(){
ll l,r;cin>>l>>r;int m=0;
for(ll i=2;i<=1000000;++i){
if(!v[i]){
v[i]=i;
prime[++m]=i;
}
for(int j=1;j<=m;++j){
if(prime[j]>v[i]||1ll*prime[j]*i>1000000)break;
v[i*prime[j]]=prime[j];
}
}
for(int i=1;i<=m;++i){
for(ll j=l/prime[i];j<=r/prime[i];++j){
if(j*prime[i]-l>=0)q[j*prime[i]-l].push_back(prime[i]);
}
}
ll ans=0;
for(ll i=l;i<=r;++i){
ll now=i,phi=i;
for(int j=0;j<q[i-l].size();++j){
while(now%q[i-l][j]==0)now/=q[i-l][j];
phi=(1ll*(1ll*(q[i-l][j]-1)*phi%mod)*quickpow(q[i-l][j],mod-2))%mod;
}
if(now>1)phi=(1ll*(1ll*(now-1)*phi%mod)*quickpow(now,mod-2))%mod;
ans=(ans+(i-phi)%mod)%mod;
}
cout<<ans<<endl;
return 0;
}
四个WA的点就是数据最大的四个点,但是既然6个点能对,应该算法思路是没错的,难道是哪里没long long吗