#include<bits/stdc++.h>
using namespace std;
#define faster() ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
// Hàm này dùng để tính số mũ của số y khi phân tích x! ra thừa số nguyên tố
long long gt(long long x, long long y){
long long dem=0;
while (x!=0){
dem+=x/y;
x/=y;
}
return dem;
}
// Dùng để xử lý
void solve(){
long long n, k;
cin >> n >> k;
long long min=1e18;
for (int i=2;i<=sqrt(k);i++){
if (k%i==0){
// Đếm số mũ của 1 thừa số nguyên tố phân tích số n
long long d=0;
while (k%i==0){
d++;
k/=i;
}
long long t=(gt(n, i))/d;
// kết quả là thương của 2 số mũ khi phân tích n! và k ra thừa số nguyên tố
if (t<min) min=t;
}
}
if (k>1 && gt(n, k)<min) min=gt(n, k);
cout << min << "\n";
}
int main(){
faster();
int t;
cin >> t;
while (t--) solve();
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBmYXN0ZXIoKSBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTtjaW4udGllKE5VTEwpO2NvdXQudGllKE5VTEwpOwovLyBIw6BtIG7DoHkgZMO5bmcgxJHhu4MgdMOtbmggc+G7kSBtxakgY+G7p2Egc+G7kSB5IGtoaSBwaMOibiB0w61jaCB4ISByYSB0aOG7q2Egc+G7kSBuZ3V5w6puIHThu5EKbG9uZyBsb25nIGd0KGxvbmcgbG9uZyB4LCBsb25nIGxvbmcgeSl7Cglsb25nIGxvbmcgZGVtPTA7Cgl3aGlsZSAoeCE9MCl7CgkJZGVtKz14L3k7CgkJeC89eTsKCX0KCXJldHVybiBkZW07Cn0KLy8gRMO5bmcgxJHhu4MgeOG7rSBsw70Kdm9pZCBzb2x2ZSgpewoJbG9uZyBsb25nIG4sIGs7CgljaW4gPj4gbiA+PiBrOwogICAgbG9uZyBsb25nIG1pbj0xZTE4OwoJZm9yIChpbnQgaT0yO2k8PXNxcnQoayk7aSsrKXsKCQlpZiAoayVpPT0wKXsKICAgICAgICAgICAgLy8gxJDhur9tIHPhu5EgbcWpIGPhu6dhIDEgdGjhu6thIHPhu5Egbmd1ecOqbiB04buRIHBow6JuIHTDrWNoIHPhu5EgbgoJCQlsb25nIGxvbmcgZD0wOwoJCQl3aGlsZSAoayVpPT0wKXsKCQkJCWQrKzsKCQkJCWsvPWk7CgkJCX0KCQkJbG9uZyBsb25nIHQ9KGd0KG4sIGkpKS9kOwogICAgICAgICAgICAvLyBr4bq/dCBxdeG6oyBsw6AgdGjGsMahbmcgY+G7p2EgMiBz4buRIG3FqSBraGkgcGjDom4gdMOtY2ggbiEgdsOgIGsgcmEgdGjhu6thIHPhu5Egbmd1ecOqbiB04buRCgkJCWlmICh0PG1pbikgbWluPXQ7CgkJfQoJfQoJaWYgKGs+MSAmJiBndChuLCBrKTxtaW4pIG1pbj1ndChuLCBrKTsKCWNvdXQgPDwgbWluIDw8ICJcbiI7Cn0KaW50IG1haW4oKXsKCWZhc3RlcigpOwoJaW50IHQ7CgljaW4gPj4gdDsKCXdoaWxlICh0LS0pIHNvbHZlKCk7Cn0=