#include<iostream>
using namespace std;
long long n,m;
long long l=1,r,ans1,ans2,ans3;
const long long p=19940417,inv2=9970209,inv6=3323403;
long long sum1(long long x){
return x*(x+1)%p*inv2%p;
}
long long sum2(long long x){
return x*(x+1)%p*(2*x+1)*inv6%p;
}
int main(){
scanf("%lld%lld",&n,&m);
if(n>m){
swap(n,m);
}
l=1;
ans1=n*n%p;
while(l<=n){
if(n/l==0) break;
r=n/(n/l);
ans1=(ans1-(sum1(r)-sum1(l-1)+p)%p*(n/l)%p+p)%p;
l=r+1;
}
l=1;
ans2=m*m%p;
while(l<=m){
if(m/l==0) break;
r=m/(m/l);
ans2=(ans2-(sum1(r)-sum1(l-1)+p)%p*(m/l)%p+p)%p;
l=r+1;
}
l=1;
while(l<=n){
if(n/l==0||m/l==0) break;
r=min(m/(m/l),n/(n/l));
long long a=(r-l+1)*n%p*m%p;
long long b=(sum1(r)-sum1(l-1)+p)%p*((n/l)*m%p+(m/l)*n%p)%p;
long long c=(sum2(r)-sum2(l-1)+p)%p*(n/l)%p*(m/l)%p;
ans3=(ans3+a-b+c+p)%p;
l=r+1;
}
long long ans4=(ans1*ans2%p-ans3)%p;
cout<<ans4;
return 0;
}