# ある行に0個、1個、2個置く組合せ数 # 隣り合うというのは左右だけでなく上下もある、実験した # dp[i列目][j個置く]組合せ数 # dp[i][2]への遷移の係数がわからなかった T = int(input()) for t in range(T): N, M = map(int, input().split()) mod = 998244353 dp = [[0]*3 for i in range(M)] dp[0][0]=1 dp[0][1]=N dp[0][2]=max(0, N*(N-1)//2-N)%mod #print(dp[0]) for i in range(1, M): for j in range(3): dp[i][0] += dp[i-1][j]*1 dp[i][1] += dp[i-1][j]*(N-j) dp[i][2] += dp[i-1][j]*max(0, (N-j)*(N-j-1)//2-(N-j*2)) for j in range(3): dp[i][j] %= mod #print(dp[i]) ans = sum(dp[M-1])%mod print(ans)