#define _CRT_SECURE_NO_WARNINGS #define _SILENCE_CXX17_C_HEADER_DEPRECATION_WARNING #include using namespace std; #define CRP(t, x) const t &x #define OPL(t, x) bool operator<(CRP(t, x)) const #define FIL(x, v) memset(x, v, sizeof(x)) #define CLR(x) FIL(x, 0) #define NE1(x) FIL(x, -1) #define INF(x) FIL(x, 0x3f) #ifndef _DEBUG #define _DEBUG 0 #endif // !_DEBUG #define IFD if (_DEBUG) typedef long long ll, i64; const ll mod = 1e9 + 7; const int N = 1e6 + 50; ll fpow(ll a, ll b) { ll r = 1; for (; b; b >>= 1, a = a * a % mod) if (b & 1) r = r * a % mod; return r; } ll _2[N]; ll calc(int n, int k) { if (n == 1) return _2[k]; if (n == 2) return _2[k] * (_2[k] - 1) % mod; return (_2[k] * (_2[k] - 2) % mod * fpow(_2[k] - 1, n - 2) + calc(n - 2, k)) % mod; } int main() { for (int i = *_2 = 1; i < N; i++) _2[i] = (_2[i - 1] << 1) % mod; int T, n, k; scanf("%d", &T); while (T--) { scanf("%d%d", &n, &k); printf("%lld\n", calc(n, k)); } return 0; }