模数是质数,可以使用快速幂计算逆元
或者打表找规律
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<string>
#include<cmath>
#include<map>
#include<set>
#include<cstdlib>
#include<vector>
using namespace std;
#define cl(a,b) memset(a,b,sizeof(a))
#define LL long long
#define pb push_back
#define gcd __gcd
#define For(i,j,k) for(int i=(j);i<k;i++)
#define lowbit(i) (i&(-i))
#define _(x) printf("%d\n",x)
const int maxn = 1e6+200;
const int inf = 1 << 28;
LL mod = 1000000007;
LL qsm(LL a,LL b){
LL ans = 1;
while(b){
if(b&1)ans = ans*a%mod;
a = a * a % mod;
b>>=1;
}
return ans % mod;
}
int main(){
int T;scanf("%d",&T);
while(T--){
LL n,m;
scanf("%lld%lld",&n,&m);
printf("%lld\n",(qsm(m,n+1)-1)*qsm(m-1,mod-2)%mod);
}
return 0;
}