#include<bits/stdc++.h>
using namespace std;
#define int __int128
const int mod = 19940417;
const int inv2 = 9970209;
const int inv6 = 3323403;
template<typename type>
inline void read(type &x){
x=0;bool flag(0);char ch=getchar();
while(!isdigit(ch)) flag=ch=='-',ch=getchar();
while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
flag?x=-x:0;
}
template<typename type>
inline void write(type x,bool mode=1){
x<0?x=-x,putchar('-'):0;static short Stack[50],top(0);
do Stack[++top]=x%10,x/=10; while(x);
while(top) putchar(Stack[top--]|48);
mode?putchar('\n'):putchar(' ');
}
int n,m;
int h(int n){
n%=mod;
return n*(n+1)%mod*inv2%mod;
}
int g(int n){
n%=mod;
return n*(n+1)%mod*(2*n%mod+1)%mod*inv6%mod;
}
int f(int k,int r){
int sum=0;
for(int i=1;i<=r;++i){
int j=min(k/(k/i),r);
sum=(sum+((h(j)-h(i-1))%mod+mod)%mod*(k/i)%mod)%mod;
i=j;
}
return sum;
}
signed main(){
read(n),read(m);
int s1=f(n,n),s2=f(m,m),s3=f(m,n);
int ans=0;
ans=(ans+(((n*n%mod-s1)%mod+mod)%mod)*(((m*m%mod-s2)%mod+mod)%mod)%mod)%mod;
ans=((ans-n*n%mod*m%mod)%mod+mod)%mod;
ans=(ans+(m*s1%mod+n*s3%mod)%mod)%mod;
int R=min(n,m),sum=0;
for(int i=1;i<=R;++i){
int to1=min(n/(n/i),R);
int to2=min(m/(m/i),R);
int j=min(to1,to2);
sum=(sum+(n/i)*(m/i)%mod*((g(j)-g(i-1))%mod+mod)%mod)%mod;
i=j;
}
write(((ans-sum)%mod+mod)%mod);
return 0;
}