#include<bits/stdc++.h>#define N 10000005#define mod 20101009#define int long longusingnamespace std;int prime[N], vis[N], mu[N], s[N], sz;voidinit(){
mu[1]=1;for(int i =2; i < N; i ++){if(!vis[i]){
prime[++ sz]= i;
mu[i]= mod -1;}for(int j =1; j <= sz && prime[j]* i < N; j ++){
vis[prime[j]* i]=1;if(i % prime[j]==0)break;else mu[i * prime[j]]= mod - mu[i];}}for(int i =1; i < N; i ++)for(int j = i; j < N; j += i)
s[j]=(s[j]+ mu[i]* i % mod)% mod;}intcalc(int x){return(x *(x +1)/2)% mod;}int n, m;signedmain(){init();scanf("%lld%lld",&n,&m);int ans =0;for(int T =1; T < N; T ++){int ha =0;
ans += T *calc(n / T)% mod *calc(m / T)% mod * s[T]% mod, ans %= mod;}printf("%lld", ans);return0;}
#include<bits/stdc++.h>#define N 10000005#define mod 20101009#define int long longusingnamespace std;int prime[N], vis[N], mu[N], s[N], sz;inlinevoidinit(){
mu[1]=1;for(int i =2; i < N; i ++){if(!vis[i]){
prime[++ sz]= i;
mu[i]= mod -1;}for(registerint j =1; j <= sz && prime[j]* i < N; j ++){
vis[prime[j]* i]=1;if(i % prime[j]==0)break;else mu[i * prime[j]]= mod - mu[i];}}for(int i =1; i < N; i ++) s[i]=(s[i -1]+ i * i % mod * mu[i])% mod;}intg(int x,int y){return(x *(x +1)/2% mod)*(y *(y +1)/2% mod)% mod;}intf(int x,int y){int ret =0;for(int l =1, r =0; l <= x; l = r +1){
r =min(x /(x / l), y /(y / l));
ret +=(s[r]- s[l -1]+ mod)*g(x / l, y / l)% mod, ret %= mod;}return ret;}int n, m;signedmain(){init();scanf("%lld%lld",&n,&m);if(n > m)swap(n, m);int ans =0;for(int l =1, r =0; l <= n; l = r +1){
r =min(n /(n / l), m /(m / l));
ans +=(r - l +1)*(l + r)/2% mod *f(n / l, m / l)% mod, ans %= mod;}printf("%lld", ans);return0;}