#include<bits/stdc++.h>
#define MOD 20101009
#define MAXN 10000007
using namespace std;
long long g(long long n ,long long m){return ((((n+n*n)/2)%MOD)*(((m*m+m)/2)%MOD))%MOD;}
long long mu[MAXN];
long long p[MAXN],cnt;
bool vis[MAXN];
long long f[MAXN];
void Prime()
{
mu[1]=1;
f[1]=1;
for(long long i=2;i<MAXN;++i)
{
if(!vis[i])
{
mu[i]=-1;
p[++cnt]=i;
}
for(long long j=1;j<=cnt&&i*p[j]<MAXN;++j)
{
long long x=i*p[j];
vis[x]=1;
if(i%p[j]==0)
{
mu[x]=0;
break;
}
mu[x]=-mu[i];
}
f[i]=(f[i-1]+(((mu[i]+MOD)%MOD)*i*i)%MOD)%MOD;
}
}
long long sum(long long n,long long m)
{
long long re=0;
for(long long i=1,j;i<=min(n,m);i=j+1)
{
j=min(n/(n/i),m/(m/i));
re=(re+(((f[j]-f[i-1]+MOD)%MOD)*(g(n/i,m/i)%MOD))%MOD)%MOD;
}
return re;
}
long long getans(long long n,long long m)
{
long long re=0;
for(long long i=1,j;i<=min(n,m);i=j+1)
{
j=min(n/(n/i),m/(m/i));
re=(re+((((((j-i+1)*(i+j))/2)%MOD)*(sum(n/i,m/i)%MOD)%MOD))%MOD)%MOD;
}
return re;
}
long long n,m;
int main()
{
scanf("%lld%lld",&n,&m);
Prime();
cout<<getans(n,m)<<endl;
return 0;
}
7718820 8445880
8534312