/*
phi(10)=5/5*(5-1)
数k被一个质数p整除:
phi(k)=phi(k)/p*(p-1)
这样子我们就把所有小于 sqrt(r) 的质数去掉了
但是还有一种情况:
比如 2*97 = 194,我们假设97>sqrt(r):phi(194)=194/2*1,此时还需要除去这个大质数的贡献。
*/
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <iostream>
using namespace std;z
#define int long long
inline int gi(){
char tmp=getchar();int ans=0;
while(!isdigit(tmp)) tmp=getchar();
while(isdigit(tmp)){
ans=ans*10+tmp-'0';
tmp=getchar();
}
return ans;
}
const int Mod = 666623333;
const int N = 4000200;
int cnt,Prime[402000];bool Vis[8000202];
inline void Pre(){
for(int i=2;i<=5000000;++i){
if(!Vis[i])
Prime[++cnt]=i;
for(int j=1;i*Prime[j]<=5000000 && j<=cnt ;++j){
Vis[i*Prime[j]]=1;
if(i%Prime[j]==0)
break; // 保证每一个数只会被最小的质因子筛去
}
}
}
int Phi[N],Remain[N];
signed main()
{
int l,r;
l=gi(),r=gi();
Pre();
for(int i=l;i<=r;++i)
Phi[i-l]=i,Remain[i-l]=i;
for(int i=1;Prime[i]*Prime[i]<=r && i<=cnt;++i){ // 枚举素数
int p=Prime[i];
int st=l;
if(st%p!=0)
st=(l/p)*p+p;
for(int j=st;j<=r;j+=p){
// if(j==0) continue;
Phi[j-l]=(Phi[j-l]/p)*(p-1);
while(Remain[j-l]%p==0)
Remain[j-l]/=p;
}
}
int ans=0;
for(int i=l;i<=r;++i){
if(Remain[i-l]>1)
Phi[i-l]=(Phi[i-l]/Remain[i-l])*(Remain[i-l]-1);
ans=(ans+(i-Phi[i-l])%Mod)%Mod;
}
printf("%lld",ans%Mod);
return 0;
}