#include<iostream>
**/*(k-1)^n+(k-1)(-1)^n;数学公式*/ **
**/* n代表个气球 K代表几种颜色;*/ **
using namespace std;
int main(){
long long n, k,ans=1,M,res=1;
int m;
long long N;
cin>>m;
for(int i=0; i<m; i++){
cin>> n >>k;
N=k-1;
int L=n%2;
//cout<<n<<endl;
while(n){
if( n & 1) res=N * res * 1ll % 100000007;
N=N*N* 1ll % 100000007;
n >>=1;
} //快速幂减少时间复杂度防止超时
// (a*b)%p=(a%p * b%p) % p; 取模公式 对数据进行处理防止数据溢出;
//cout<<res<<endl;
//cout<<n<<endl;
if(!L) ans= ((k-1 % 100000007)+ res )%100000007;
if(L) ans= (res- (k-1 % 100000007))%100000007;
cout<<ans<<endl;
res=1;
}
return 0;
}