#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<map>
#include<set>
#include<queue>
using namespace std;

typedef long long ll;
const int MX=1e5,MAXN=1e5+5,MOD=1e9+7;
inline void ADD(int& x,int y){x+=y;if(x>=MOD)x-=MOD;}

#define pb push_back
#define mp make_pair
#define pi pair<int, int>
#define fi first
#define se second
template<typename T> void chkmax(T& x,T y){if(y>x)x=y;}
template<typename T> void chkmin(T& x,T y){if(y<x)x=y;}

ll q_pow(ll a,ll b,ll p=MOD){
	ll ret=1;
	for(;b;a=a*a%p,b>>=1)if(b&1)ret=ret*a%p;
	return ret;
}
ll q_inv(ll x,ll p=MOD){return q_pow(x,p-2,p);}

struct node{int v,next;}E[MAXN<<1];int head[MAXN],Elen;
void add(int u,int v){++Elen,E[Elen].v=v,E[Elen].next=head[u],head[u]=Elen;}

int T,N,K,fac[MAXN],ifac[MAXN];
inline int binom(int n,int m){
	return 1ll*fac[n]*ifac[m]%MOD*ifac[n-m]%MOD;
}

int main(){
	fac[0]=1;for(int i=1;i<=MX;++i)fac[i]=1ll*fac[i-1]*i%MOD;
	ifac[MX]=q_inv(fac[MX]);for(int i=MX-1;i>=0;--i)ifac[i]=1ll*ifac[i+1]*(i+1)%MOD;
	scanf("%d",&T);
	while(T--){
		scanf("%d%d",&N,&K);
		int ans=0;
		for(int t=1;N-(t-1)*K-1>=0;++t){
			//printf("t=%d,%d\n",t,binom(N-(t-1)*K+(t-1),t));
			ADD(ans,1ll*fac[t]*fac[N-t]%MOD*binom(N-(t-1)*K+(t-1),t)%MOD);
		}
		ans=1ll*ans*ifac[N]%MOD;
		ADD(ans,1);
		printf("%d\n",ans);
	}
	return 0;
}