#define _CRT_SECURE_NO_WARNINGS
#define _SILENCE_CXX17_C_HEADER_DEPRECATION_WARNING
#include <bits/stdc++.h>
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;
}