ll C(ll m, ll n){ if(m < 0 n < 0 n > m) return0; ll ans = F[m]; ans = ans * invF[n] % mod; ans = ans * invF[m - n] % mod; return ans ; }
ll quick_pow(ll a, ll b){ ll ans = 1; while(b) { if(b & 1) ans = ans * a % mod; a = a * a % mod; b >>= 1; } return ans % mod; }
voidsolve(){ Init(); int _; cin >> _; while(_--) { ll n, m; cin >> n >> m; ll b = m / 2; ll ans = quick_pow(quick_pow(2, b), mod - 2); ll sum = 0; for(int i = 0;i <= b; i++) { sum = (sum + C(b, i) * quick_pow(2 * i + (m & 1), n) % mod) % mod; } ans = ans * sum % mod; cout << ans << endl; } }