RT
#include<bits/stdc++.h>
using namespace std;
long long inv[10010000],mu[10010000],squ[10010000];
int prim[10010000];bool vis[10010000];
long long x,MOD,n,m,l,r,sum,i,j,len;
long long ask(long long a,long long b)
{
long long ans1,ans2,x,i,lft,rit,sum1,sum2,l,r;
long long ans=0;
for (l=1,r;l<=min(a,b);l=r+1)
{
r=min(a/(a/l),b/(b/l));
lft=1;rit=a/l;sum1=(lft+rit)*(a/l)/2;
lft=1;rit=b/l;sum2=(lft+rit)*(b/l)/2;
sum1=sum1;sum1%=MOD;sum2=sum2;sum2%=MOD;
sum1*=sum2;sum1%=MOD;
x=mu[r]-mu[l-1];
if (x<0) ans1=(ans1+(-x)*sum1 % MOD) % MOD;
else ans2=(ans2+x*sum1 % MOD) % MOD;
}
ans2%=MOD;ans1%=MOD;
ans=(ans2-ans1+MOD) % MOD;
return ans;
}
int main()
{
MOD=20101009;
inv[1]=1;
for (i=2;i<=10000000;i++) inv[i]=((MOD-MOD/i)*inv[MOD % i]) % MOD;
mu[1]=1;vis[1]=true;
for (i=2;i<=10000000;i++)
{
if (vis[i]==false)
{
len++;prim[len]=i;
mu[i]=-1;
}
for (j=1;j<=len,i*prim[j]<=10000000;j++)
{
vis[i*prim[j]]=true;
mu[i*prim[j]]=mu[i]*mu[prim[j]];
if (i % prim[j]==0)
{
mu[i*prim[j]]=0;break;
}
}
}
cin>>n>>m;
for (i=1;i<=n;i++) mu[i]=mu[i]*i*i;
for (i=1;i<=max(n,m);i++) mu[i]=mu[i]+mu[i-1];
for (i=1;i<=max(n,m);i++)
{
x=i*i % MOD;x=x*inv[i] % MOD;squ[i]=(squ[i-1]+x) % MOD;
}
for (l=1,r;l<=min(n,m);l=r+1)
{
r=min(n/(n/l),m/(m/l));
sum=sum+(((squ[r]-squ[l-1]+MOD) % MOD)*ask(n/l,m/l)) % MOD;
sum=sum % MOD;
}
cout<<sum<<endl;
return 0;
}