#include<bits/stdc++.h>

using namespace std;

const int N = 2e6 + 10;
const int mod = 1e9 + 7;

typedef long long ll;


ll n, k;

ll qmi (ll a, ll b) {
ll ans = 1;
while (b) {
if (b & 1) ans = ans * a % mod;
a = a *a % mod;
b >>= 1;
}
return ans;
}
void solve() {
cin >> n >> k;
if (n & 1) {
ll ans = qmi((qmi(2, n - 1) + 1) % mod, k) % mod;
cout << ans << endl;
}
else {
ll ans = qmi((qmi(2, n - 1) - 1) % mod, k) % mod;
for (int i = 1; i <= k; i ++) {
ans = (ans + qmi(qmi(2, n - 1) - 1, i - 1) % mod * qmi(qmi(2, n) % mod, k - i)) % mod;
}
cout << ans << endl;
}
}
int main () {
int t;
cin >> t;
while (t --) solve();
return 0;
}

如果n为偶数 左边等于右边 左边为0, 右边选择偶数个1 C(n, 0) + c(n, 2) + ... + C(n, n - 2) = 2^(n - 1) - 1(全选就是左边大于右边) 左边大于右边 固定前i - 1个数相等,第i个数为1 否则 考虑为0或者为1 讨论的过程中只要不重不漏就行了。至于讨论什么对象,哪个方便就讨论哪个