#include<bits/stdc++.h>
#define ll __int128
using namespace std;
const ll maxn =2e6+5;
inline ll read_int(){
ll a=0,f=0,g=getchar();
while(g<'0'||g>'9'){if(g=='-') f=1;g=getchar();}
while('0'<=g&&g<='9') a=(a << 3) + (a << 1) + (g ^ 48),g=getchar();
return f ? -a : a;
}
inline void write(ll s,bool f=1){
ll top=0,a[40];
if(s<0) s=-s,putchar('-');
while(s) a[++top]=s%10,s/=10;
if(top==0) a[++top]=0;
while(top) putchar(a[top]+'0'),top--;
if(f) putchar('\n');
}
ll n,m,ans;
ll mod=19940417;
ll inv2,inv6;
inline void exgcd(ll a,ll b,ll &x,ll &y){
if(b==0){
x=1,y=0;
return;
}
exgcd(b,a%b,y,x);
y-=a/b*x;
}
inline ll get1(ll l,ll r){return (l+r)*(r-l+1)%mod*inv2%mod;}
inline ll get2(ll n){
ll ans=n*n%mod;
for(ll i=1,go;i<=n;i=go+1){
go=n/(n/i);
ans=ans-get1(i,go)*(n/i)%mod;
ans=(ans%mod+mod)%mod;
}
return ans;
}
inline ll get3(int l,int r){return ((r*(r+1)%mod*(2*r+1)%mod*inv6%mod-(l-1)*(l-1+1)%mod*(2*(l-1)+1)%mod*inv6%mod)%mod+mod)%mod;}
inline void read(){
ll y;
exgcd(6,mod,inv6,y);
exgcd(2,mod,inv2,y);
n=read_int(),m=read_int();
if(n>=m) swap(n,m);
ll ans1=get2(n)*get2(m)%mod;
ll ans2=n*m%mod*n%mod;
for(ll i=1,go;i<=n;i=go+1){
go=min(n/(n/i),m/(m/i));
ans2=((ans2-(get1(i,go)*((((n/i)*m)+((m/i)*n))%mod))%mod)%mod+mod)%mod;
ans2=(ans2+(get3(i,go)%mod*(n/i)%mod*(m/i)%mod))%mod;
}
ans=ans1-ans2;
ans=(ans%mod+mod)%mod;
write(ans);
}
int main (){
freopen(".in","r",stdin);
read();
}