#include <bits/stdc++.h>

#define mp std::make_pair
#define pb push_back
#define fr first
#define se second
#define DEBUG(x) std::cout << #x << " = " << x << "\n"
#define DDEBUG(x, y) std::cout << #x << " = " << x << " " << #y << " = " << y << "\n"

typedef long long ll;
typedef std::pair<int, int> pii;
typedef std::vector<int> vi;
typedef std::vector<pii> vp;

template<class T> inline T max(const T &x, const T &y) { return x > y ? x : y; }
template<class T> inline T min(const T &x, const T &y) { return x < y ? x : y; }
template<class T> inline bool chkmax(T &x, const T &y) { return x < y ? x = y, true : false; }
template<class T> inline bool chkmin(T &x, const T &y) { return x > y ? x = y, true : false; }

inline int read() {
  register int x = 0, v = 1;
  register char ch = getchar();
  while (!isdigit(ch)) {
    if (ch == '-') v = -1;
    ch = getchar();
  }
  while (isdigit(ch)) {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  return x * v;
}

const int MOD = 1e9 + 7;
const int MAXN = 2e5;

int n, K;
int frac[MAXN | 1], ifrac[MAXN | 1];

int fpow(int x, int y) {
  int res = 1, base = x;
  while (y > 0) {
    if (y & 1) res = 1ll * res * base % MOD;
    base = 1ll * base * base % MOD;
    y >>= 1;
  }
  return res;
}

inline int C(int x, int y) { 
	return x < y ? 0 : 1ll * frac[x] * ifrac[y] % MOD * ifrac[x - y] % MOD; 
}
inline int add(int x, int y) { return x + y >= MOD ? x + y - MOD : x + y; }

int main() {
  frac[0] = 1;
  for (int i = 1; i <= MAXN; ++i) frac[i] = 1ll * frac[i - 1] * i % MOD;
  ifrac[MAXN] = fpow(frac[MAXN], MOD - 2);
	for (int i = MAXN - 1; ~i; --i) ifrac[i] = 1ll * ifrac[i + 1] * (i + 1) % MOD;
	int cases = read();
	while (cases--) {
		n = read(); K = read();
		int ans = 0;
		for (int i = 0; i <= n; ++i) {
			if (n - (K - 1) * (i - 1) < 0) break;
			ans = add(ans, 1ll * C(n - (K - 1) * (i - 1), i) * fpow(C(n, i), MOD - 2) % MOD);
		}
		printf("%d\n", ans);
	}
  return 0;
}
