#yukicoder2576 LCM Pattern def main(): #入力受取 N, M = map(int, input().split()) MOD = 998244353 #Mを素因数分解 E, F = [], [] n = M for p in range(2, M + 1): if p ** 2 > n: break if n % p == 0: E.append(0); F.append(p) while n % p == 0: n //= p E[-1] += 1 if n != 1: E.append(1); F.append(p) #各素因数を適当に分配する 注意点: 必ずひとつ以上は最大の指数を取る #まとめてDPでもいいが、上手にやるなら: #(すべての指数が0 ~ eの間) - (すべての指数が0 ~ e-1の間) でいい ans = 1 for e, f in zip(E, F): base = pow(e + 1, N, MOD) - pow(e, N, MOD) ans = ans * base % MOD #答えを出力 print(ans) main()