use ac_library::ModInt998244353; use proconio::input; type Mint = ModInt998244353; fn main() { input! { n: usize, m: usize } let f = |d: usize, n: usize| { let k = n / d; Mint::from(k * (k + 1) / 2) * d }; let (n, m) = (n.min(m), n.max(m)); let mut ans = f(1, n) * f(1, m); let mut mu = vec![2i8; n + 1]; for i in 2..=n { if mu[i] == 2 { for j in (i..=n).step_by(i) { mu[j] = match mu[j] { 1 | 2 => -1, -1 => 1, 0 => 0, _ => unreachable!(), } } for j in (i * i..=n).step_by(i * i) { mu[j] = 0; } } if mu[i] == 1 { ans += f(i, n) * f(i, m); } else if mu[i] == -1 { ans -= f(i, n) * f(i, m); } } println!("{ans}"); } // sum mu(d)*ab for a<=n, b<=m, d|a, d|b