MOD = 998244353i64 n, m = read_line.split.map(&.to_i) k = {n, m}.min is_prime = Array.new(k + 1, true) mu = Array.new(k + 1, 1) mu[0] = 0 ans = tri(n.to_i64) * tri(m.to_i64) % MOD 2.upto(k) do |i| if is_prime[i] (i * 2).step(to: k, by: i) do |j| is_prime[j] = false mu[j] *= -1 end mu[i] *= -1 mu[i * i] = 0 if i.to_i64 * i <= k end if mu[i] == 0 (i * 2).step(to: k, by: i) do |j| mu[j] = 0 end end ans += tri(n.to_i64 // i) * tri(m.to_i64 // i) % MOD * mu[i] * i % MOD * i ans %= MOD end ans += MOD if ans < 0 puts ans def tri(x : Int64) x * (x + 1) // 2 % MOD end