![]()
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=1e6+10;
const int mod=1e9+7;
int dp[maxn][3];
int quick(int a,int n)
{
int ans=1;
int x=a;
while(n!=0)
{
if(n%2==1) {ans=ans%mod*x%mod; n--; }
else { x=x%mod*x%mod;n=n/2; }
}
return ans%mod;
}
int32_t main()
{
int T; cin>>T;
while(T--)
{
memset(dp,0,sizeof(dp));
int n,k; cin>>n>>k;
k=quick(2,k);
dp[1][0]=k%mod;// 1
dp[1][1]=0;// qi ta
dp[1][2]=0;// bu neng de
for(int i=2;i<=n;i++)
{
dp[i][0]=dp[i-1][0]%mod+dp[i-1][1]%mod;
dp[i][1]=dp[i-1][0]*(k-2)+dp[i-1][1]*(k-3)%mod+dp[i-1][2]*(k-2)%mod;
dp[i][2]=dp[i-1][2]%mod+dp[i-1][1]%mod;
dp[i][0]=dp[i][0]%mod;
dp[i][1]=dp[i][1]%mod;
dp[i][2]=dp[i][2]%mod;
// cout<<dp[i][0]<<" "<<dp[i][1]<<" "<<dp[i][2]<<endl;
}
cout<<(dp[n][0]+dp[n][1])%mod<<endl;
}
}
A.cpp