constint mod = 19940417; inlineintmin(constint x, constint y){return x < y ? x : y;}
intqpow(int a, int b){ int ret = 1LL; while (b) { if (b & 1) ret = ret * a % mod; a = a * a % mod; b >>= 1; } return ret; }
intcalc(int n){ int ans = 0; ans = n * n; for (int l = 1, r; l <= n; l = r + 1) { r = n / (n / l); ans -= (n / l) * (r - l + 1) * (l + r) / 2; } ans = (ans % mod + mod) % mod; return ans; } intcalc2(int n, int k){ int sum = 0; if (k > n) k = n; for (int l = 1, r; l <= k; l = r + 1) { r = min(n / (n / l), k); sum = (sum + (n / l) * (r - l + 1) * (l + r) / 2 % mod) % mod; } return sum; } intcalc4(int n){ if (!n) return0; int a[] = {n, n + 1, 2 * n + 1}; for (int i = 0; i <= 2; ++ i) if (a[i] % 2 == 0) {a[i] /= 2; break;} for (int i = 0; i <= 2; ++ i) if (a[i] % 3 == 0) {a[i] /= 3; break;} return a[0] * a[1] % mod * a[2] % mod; } intcalc3(int n, int m){ int sum = 0; for (int l = 1, r; l <= n; l = r + 1) { r = min(n / (n / l), m / (m / l)); int k = (calc4(r) - calc4(l - 1) + mod) % mod; sum = (sum + (n / l) * (m / l) * k % mod) % mod; } return sum % mod; }
signedmain(){ int n, m, ans; // printf("%lld", calc3(6, 10)); // return 0; scanf("%lld%lld", &n, &m); if (n > m) n ^= m ^= n ^= m; ans = calc(n) * calc(m) % mod; ans = (ans - n * n % mod * m % mod) % mod; ans = (ans - calc3(n, m)) % mod; ans = (ans + n * calc2(m, n) % mod + m * calc2(n, m) % mod) % mod; printf("%lld", (ans + mod) % mod); return0; }