#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; void fre() { freopen("c://test//input.in", "r", stdin); freopen("c://test//output.out", "w", stdout); } #define MS(x,y) memset(x,y,sizeof(x)) #define MC(x,y) memcpy(x,y,sizeof(x)) #define MP(x,y) make_pair(x,y) #define ls o<<1 #define rs o<<1|1 typedef long long LL; typedef unsigned long long UL; typedef unsigned int UI; template inline void gmax(T1 &a, T2 b) { if (b>a)a = b; } template inline void gmin(T1 &a, T2 b) { if (binline void gadd(T1 &a, T2 b) { a+=b; a%=Z; } int casenum, casei; int pr[33000],tot; bool vis[34000]; int n,d; void init() { tot = 0; for(int i = 2; i <= 33000; ++i) { if(!vis[i]) pr[tot++] = i; for(int j = i*i; j <= 33000; j+=i) vis[j] = 1; } } void solve() { scanf("%d%d",&n,&d); int top = (n-1)/d; gmin(top,d); for(int i = 0; pr[i] < top && pr[i]*pr[i] <= d; ++i) { if(d%pr[i] == 0) { gmin(top,pr[i]); break; } } int ans = upper_bound(pr,pr+tot,top) - pr; printf("%d\n",ans); } int main() { init(); int T; scanf("%d",&T); while(T--)solve(); }