#include<bits/stdc++.h>// #define ll long long#defineintlonglong#definedbg(x) cout << #x <<"==="<< x << endlusingnamespace std;constint N =3e5+10;constint mod =1e9+7;int n, k, a, b, ans;int re[N], inv[N], fac[N];voidinit(int n){
re[0]= inv[1]= fac[0]= re[1]= fac[1]=1;for(int i =2; i <= n;++i){
fac[i]= fac[i -1]* i % mod;
inv[i]=(mod - mod / i)* inv[mod % i]% mod;
re[i]= re[i -1]* inv[i]% mod;}}intC(int a,int b){return fac[a]* re[b]% mod * re[a - b]% mod;}//不知道为什么,直接pow(2,200000)会出错,而pow(2,200000,mod)就不会出错intpow(int a,int p,int mod){// a %= mod;int ans =1;while(p){if(p &1) ans = ans * a % mod;
p >>=1, a =(a * a)% mod;}return ans;}voidsolve1(int n,int k){
ans =1, a =0;for(int i =0; i < n; i +=2) a =(a +C(n, i))% mod;//这一位都为0
a =(a +1)% mod;//这一位都为1for(int j =0; j < k; j++) ans = ans * a % mod;
cout << ans << endl;}voidsolve0(int n,int k){
a =0, b =pow(2, n, mod), ans =1;for(int i =0; i < n; i +=2) a =(a +C(n, i))% mod;//这一位都为0for(int j =0; j < k; j++) ans =(ans * a % mod +pow(b, j, mod))% mod;
cout << ans << endl;}signedmain(){int T =1;
cin >> T;init(N -1);while(T--){scanf("%lld%lld",&n,&k);if(n %2==0)solve0(n, k);elsesolve1(n, k);}return0;}/*
input:::
5
200000 200000
24567 23423
1 200000
200000 1
200000 0
output:::
226490044
470587519
175895282
87947641
1
*/