#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;
}