#pragma GCC optimize("Ofast")#include<cstdio>#include<cstring>#include<algorithm>#define mod 1000000007#define LL long long#define R register#define I inlineusingnamespace std;int n,k;int prime[5000010],mu[5000010],f[5000010],sum_f[5000010],Pow[5000010];bool bz[5000010];
I intksm(int x,int k){int tot=1;for(;k;k>>=1){if(k&1) tot=(LL)tot*x%mod;
x=(LL)x*x%mod;}return tot;}
I voidinit(int ma){int t=0;
mu[1]=1;
bz[0]=bz[1]=true;
Pow[0]=1,Pow[1]=1;for(R int i=2;i<=ma;i++){if(!bz[i]) prime[++t]=i,mu[i]=-1,Pow[i]=ksm(i,k);for(R int j=1;j<=t&&i*prime[j]<=ma;j++){
bz[i*prime[j]]=true;
Pow[i*prime[j]]=(LL)Pow[i]*Pow[prime[j]]%mod;if(!(i%prime[j])){
mu[i*prime[j]]=0;break;}
mu[i*prime[j]]=-mu[i];}}for(R int i=1;i<=ma;i++){if(!mu[i])continue;for(R int j=i;j<=ma;j+=i)
f[j]=((LL)f[j]+mu[i]*Pow[j/i]+mod)%mod;}for(R int i=1;i<=ma;i++)
sum_f[i]=(sum_f[i-1]+f[i])%mod;}
I intwork(int n,int m){int sum=0;for(R int l=1,r;l<=min(n,m);l=r+1){
r=min(n/(n/l),m/(m/l));
sum=((LL)sum+((LL)n/l)*((LL)m/l)%mod*((sum_f[r]-sum_f[l-1]+mod)%mod)%mod)%mod;}return sum;}intmain(){int T;int n,m;scanf("%d %d",&T,&k);init(5000000);while(T--){scanf("%d %d",&n,&m);printf("%d\n",work(n,m));}}