import math MOD = 998244353 def main(): import sys input = sys.stdin.read().split() N = int(input[0]) M = int(input[1]) max_n = N fact = [1] * (max_n + 1) for i in range(1, max_n + 1): fact[i] = fact[i-1] * i % MOD inv_fact = [1] * (max_n + 1) inv_fact[max_n] = pow(fact[max_n], MOD-2, MOD) for i in range(max_n - 1, -1, -1): inv_fact[i] = inv_fact[i+1] * (i+1) % MOD def comb(n, k): if k < 0 or k > n: return 0 return fact[n] * inv_fact[k] % MOD * inv_fact[n - k] % MOD pow4 = pow(4, N, MOD) inv_pow4 = pow(pow4, MOD-2, MOD) total = 0 for k in range(-N, N + 1): l_squared = k * k - M if l_squared < 0: continue l = math.isqrt(l_squared) if l * l != l_squared: continue for l_val in [l, -l]: if abs(l_val) > N: continue if (k + l_val) % 2 != N % 2: continue a_min = max(abs(k), 0) a_max = min(N - abs(l_val), N) if a_min > a_max: continue parity = k % 2 a_start = a_min if (a_min % 2 == parity) else a_min + 1 if a_start > a_max: continue # Iterate through possible a values a = a_start while a <= a_max: b = N - a if abs(l_val) > b: a += 2 continue if (l_val % 2) != (b % 2): a += 2 continue x = (a + k) // 2 if x < 0 or x > a: a += 2 continue y = (b + l_val) // 2 if y < 0 or y > b: a += 2 continue # Compute combinations c_n_a = comb(N, a) c_a_x = comb(a, x) c_b_y = comb(b, y) contribution = c_n_a * c_a_x % MOD contribution = contribution * c_b_y % MOD total = (total + contribution) % MOD a += 2 ans = total * inv_pow4 % MOD print(ans) if __name__ == '__main__': main()