from sys import stdin input = stdin.readline def eratosthenes(n): sieve = [True] * (n + 1) for i in range(int(n**0.5) + 1): if i < 2: sieve[i] = False elif sieve[i]: for j in range(i, n//i + 1): sieve[i * j] = False return sieve E = eratosthenes(10**7) cum = [0] cum2 = [0] for i in range(1, 10**7+1): cum.append(cum[-1]) cum2.append(cum2[-1]) if E[i] and E[i^2] and i^2 < i: cum[-1] += 1 if E[i]: cum2[-1] += 1 def matrix(a, b): ans = [[0]*len(b[0]) for _ in range(len(a))] for i in range(len(a)): for j in range(len(b[0])): for k in range(len(b)): ans[i][j] += a[i][k]*b[k][j]%MOD ans[i][j] %= MOD return ans MOD = 998244353 for _ in range(int(input())): N, M = map(int, input().split()) if N == 1: print(cum2[M]) continue dp = [[[0]*2 for _ in range(2)]] C = cum[M] dp[0][0][1] = 1 dp[0][1][0] = C*2%MOD dp[0][1][1] = 1 for _ in range(29): dp.append(matrix(dp[-1], dp[-1])) ansM = [[1], [C*2%MOD]] for i in range(30): if 1<