1 #include<bits/stdc++.h>
2 using namespace std;
3 int prime[1000010];
4 int tot,mz[10000010];
5 int f[10000010],n,m;
6 long long ans;
7 const int mod=20101009;
8 long long sum(int ki,int kj) {
9 return ((((long long)ki*(ki+1)/2)%mod)*(((long long)kj*(kj+1)/2)%mod))%mod;
10 }
11 int main() {
12 //freopen("a.out","w",stdout);
13 scanf("%d%d",&n,&m);
14 if (n>m) {
15 int t=n;
16 n=m;
17 m=t;
18 }
19 for (int i=2;i<=n;++i) {
20 if (!mz[i]) {
21 prime[++tot]=i;
22 mz[i]=i;
23 }
24 for (int j=1;j<=tot&&i*prime[j]<=n;++j) {
25 mz[i*prime[j]]=prime[j];
26 if(i%prime[j]==0) break;
27 }
28 }
29 //for (int i=1;i<=tot;++i) cout<<prime[i]<<endl;
30 //for (int i=1;i<=n;++i) cout<<mz[i]<<endl;
31 f[1]=1;
32 for (int i=2;i<=n;++i)
33 if(mz[i/mz[i]]==mz[i]) f[i]=f[i/mz[i]]%mod;
34 else f[i]=((long long)(f[i/mz[i]]*(1-mz[i])))%mod;
35 for (int i=1;i<=n;++i) ans=(ans+(sum(n/i,m/i)*(((long long)f[i]*i)%mod)))%mod;
36 printf("%lld\n",(ans%mod+mod)%mod);
37 return 0;
38 }