#include <iostream>
#include <cstring>
#define N 10000005
#define mod 20101009
bool isPrime[N];
int mo[N],prime[N];
int gcd(int a,int b){return b ? gcd(b,a % b) : a;}
long lcm(int a,int b){return 1l * a / gcd(a,b) * b;}
int f(int n,int m){return (1l * n * (n + 1) / 2) % mod * (1l * m * (m + 1) / 2) % mod;}
int g(int n,int m){
int ans = 0;
for (int i = 1;i <= std::min(n,m);i++) ans = (ans + 1l * mo[i] * i % mod * i % mod * f(n / i,m / i)) % mod;
return ans;
}
int main(){
int n,m,cnt = 0,ans = 0;
mo[1] = 1;
std::cin >> n >> m;
memset(isPrime,true,sizeof(isPrime));
isPrime[0] = isPrime[1] = false;
for (int i = 2;i <= std::max(n,m);i++){
if (isPrime[i]) prime[++cnt] = i,mo[i] = -1;
for (int j = 1;j <= cnt && i * prime[j] <= std::max(n,m);j++){
isPrime[i * prime[j]] = false;
if (i % prime[j] == 0) break;
mo[i * prime[j]] = -mo[i];
}
}
for (int i = 1;i <= std::min(n,m);i++) ans = (ans + g(n / i,m / i)) % mod;
std::cout << (ans + mod) % mod << '\n';
return 0;
}