#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define endl '\n'
#define all(x) (x).begin(),(x).end()
#define trace(...) debug(#__VA_ARGS__, __VA_ARGS__)
template <typename Arg1>
void debug(const char* name, Arg1&& arg1){
  cerr << name << ": " << arg1 << endl;
}
template <typename Arg1, typename... Args>
void debug(const char* names, Arg1&& arg1, Args&&... args){
  const char* comma = strchr(names + 1, ',');
  cerr.write(names, comma - names) << ": " << arg1 << " | ";
  debug(comma + 1, args...);
}

const int INF=1000000000+5;
const int N=2e5+5;
const int M=30;
const ll oo=LLONG_MAX;
const int mod=1e9+7;

inline void check_ONLINE_JUDGE(){
	#ifndef ONLINE_JUDGE 
	freopen("INP.txt","r",stdin);
	freopen("OUT.txt","w",stdout);
	#endif
}

int f[N],ifac[N];

int mul(int a,int b){
	return 1ll*a*b%mod;
}

int poww(int a,int b){
	int r=1;
	while(b){
		if(b&1) r=mul(r,a);
		a=mul(a,a);
		b>>=1;
	}
	return r;
}

int inv(int x){
	return poww(x,mod-2);
}

void init(){
	f[0]=f[1]=1;
	ifac[0]=ifac[1]=inv(f[1]);
	for(int i=2;i<N;++i){
		f[i]=mul(f[i-1],i);
		ifac[i]=inv(f[i]);
	}
}

void add_self(int& a,int b){
	a+=b;
	if(a>=mod) a-=mod;
}

int bino(int n,int k){
	if(n<k||k<0) return 0;
	return mul(f[n],mul(ifac[n-k],ifac[k]));
}


void solve(){
	int n,k;
	cin>>n>>k;
	int ans=1;
	for(int j=1;j<=n;++j){
		if(1ll*j<=1ll*n-1ll*(j-1)*(k-1)){
			int ways=bino(n-(j-1)*(k-1),j);
			int deno=ifac[n];
			int nume=mul(ways,mul(f[j],f[n-j]));
			add_self(ans,mul(nume,deno));
		}
	}
	cout<<ans<<endl;
}



int main(){
	check_ONLINE_JUDGE();
	ios::sync_with_stdio(0); cin.tie(0);
	init();
	int t;
	cin>>t;
	while(t--) solve();
	return 0;
}
