#include<bits/stdc++.h>
#include<boost/multiprecision/cpp_int.hpp>
namespace mp=boost::multiprecision;
using namespace mp;
using namespace std;
const int mod=1000000007;
int cal(int a,cpp_int b){
long long x=1,y=a;
while(b){
if(b&1)x=x*y;
if(x>=mod)x=x-(x/mod)*mod;
y=y*y;
if(y>=mod)y=y-(y/mod)*mod;
//same like b/2
b>>=1;
}
return x;
}
int main(){
int t;
cpp_int n,k;
long long ans,a1;
for(scanf("%d",&t);t--;){
cin>>n>>k;
k--;
if(k>=mod)k%=mod;
ans=(long long)k;
if(n&1)ans=ans*(-1);
a1=cal((int)k,n);
printf("%lld\n",(a1+ans+mod)%mod);
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2luY2x1ZGU8Ym9vc3QvbXVsdGlwcmVjaXNpb24vY3BwX2ludC5ocHA+Cm5hbWVzcGFjZSBtcD1ib29zdDo6bXVsdGlwcmVjaXNpb247CnVzaW5nIG5hbWVzcGFjZSBtcDsKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKY29uc3QgaW50IG1vZD0xMDAwMDAwMDA3OwppbnQgY2FsKGludCBhLGNwcF9pbnQgYil7Cglsb25nIGxvbmcgeD0xLHk9YTsKCXdoaWxlKGIpewoJCWlmKGImMSl4PXgqeTsKCQlpZih4Pj1tb2QpeD14LSh4L21vZCkqbW9kOwoJCXk9eSp5OwoJCWlmKHk+PW1vZCl5PXktKHkvbW9kKSptb2Q7CgkJLy9zYW1lIGxpa2UgYi8yCgkJYj4+PTE7Cgl9CglyZXR1cm4geDsKfQppbnQgbWFpbigpewoJaW50IHQ7CgljcHBfaW50IG4sazsKCWxvbmcgbG9uZyBhbnMsYTE7Cglmb3Ioc2NhbmYoIiVkIiwmdCk7dC0tOyl7CgkJY2luPj5uPj5rOwoJCWstLTsKCQlpZihrPj1tb2QpayU9bW9kOwoJCWFucz0obG9uZyBsb25nKWs7CgkJaWYobiYxKWFucz1hbnMqKC0xKTsKCQlhMT1jYWwoKGludClrLG4pOwoJCXByaW50ZigiJWxsZFxuIiwoYTErYW5zK21vZCklbW9kKTsKCX0KfSA=