## https://yukicoder.me/problems/no/2576 import math MOD = 998244353 def main(): N, M = map(int, input().split()) # 素因数分解 m = int(math.sqrt(M)) primes = {} for p in range(2, m + 1): if M % p == 0: primes[p] = 0 while M % p == 0: primes[p] += 1 M //= p if M > 1: primes[M] = 1 prime_array = [(p, e) for p, e in primes.items()] p_len = len(prime_array) dp = [0] * (2 ** p_len) x = 1 for _, e in prime_array: x *= e dp[0] = pow(x, N, MOD) for bit in range(1, 2 ** p_len): x = 1 for k in range(p_len): _, e = prime_array[k] if bit & (1 << k) > 0: x *= (e + 1) else: x *= e base = pow(x, N, MOD) for pre_bit in range(bit): if bit & pre_bit == pre_bit: base -= dp[pre_bit] base %= MOD dp[bit] = base print(dp[-1]) if __name__ == "__main__": main()