#include<bits/stdc++.h>
#define int long long
#define inv 3323403
#define inv2 9970209
#define mod 19940417
using namespace std;
char user;
template <typename T> inline void read(T &x){
char ch = getchar(); T f = 1; x = 0;
for(; (!isdigit(ch)) and ch != '-'; ch = getchar());
if(ch == '-') f = -1, ch = getchar();
for(; isdigit(ch); x = (x << 3) + (x << 1) + ch - 48, ch = getchar());
x *= f;
}
template<typename T, typename ...Arg>void read(T &x, Arg& ...arg){
read(x);
read(arg...);
}
template <typename T>void write(T x){
if(x < 0) putchar('-'), x = -x;
if(x > 9) write(x / 10);
putchar(x % 10 + '0');
}
template <typename T, typename ...Arg> void write(T x, Arg ...arg){
write(x);
putchar(user);
write(arg...);
}
const int N = 5e5 + 5;
int MOD(int x){
return ((x % mod) + mod) % mod;
}
int function1(int n, int m){
int L = 1, R = 0, ans = 0;
for(; L <= m; L = R + 1){
R = min(m, n / (n / L));
ans = MOD(ans + MOD(MOD(MOD((R - L + 1) * (R + L)) * inv2) * (n / L)));
}
return ans;
}
int pre_function(int L, int R){
int ans = MOD(MOD(MOD((R + 1) * (2 * R + 1)) * R) * inv);
int ans2 = MOD(MOD(MOD((L + 1) * (2 * L + 1)) * L) * inv);
return MOD(ans - ans2);
}
int function2(int n, int m){
int up = min(n, m), L = 1, R = 0, ans = 0;
for(; L <= up; L = R + 1){
R = min(up, min(n / (n / L), m / (m / L)));
ans = MOD(ans + MOD(MOD(pre_function(L, R) * (n / L)) * (m / L)));
}
return ans;
}
signed main(signed agrc, char const *argv[]){
int n, m; read(n, m);
int front = MOD(MOD(MOD(n * n) - MOD(function1(n, n))) * MOD(MOD(m * m) - MOD(function1(m, m))));
int down1 = MOD(MOD(MOD(MOD(n * m) * min(n, m)) - MOD(m * function1(n, min(n, m)))) - MOD(n * function1(m, min(n, m))));
int down2 = function2(n, m);
write(down1);putchar('\n');
write(MOD(front - MOD(down1 + down2)));
return 0;
}
