#include <iostream>
#include <unordered_map>
using namespace std;
int main() {
int n,a;
//n!=1*2*....*n
//a=p1^k1*p2^k2*....*pn^kn
//n!=p1^k1*p2^k2*....*pn^kn
cin>>n>>a;
unordered_map<int, int> n_primes;
unordered_map<int, int> a_primes;
for(int i=2;i<=n;i++){
int j;
int t=i;
for(j=2;j<=t/j;j++){
while(t%j==0){
if(n_primes.count(j)){
n_primes[j]++;
}else{
n_primes[j]=1;
}
t/=j;
}
}
if(t>1){
if(n_primes.count(t)){
n_primes[t]++;
}else{
n_primes[t]=1;
}
}
}
for(int i=2;i<=a/i;i++){
while(a%i==0){
if(a_primes.count(i)){
a_primes[i]++;
}else{
a_primes[i]=1;
}
a/=i;
}
}
if(a>1){
if(a_primes.count(a)){
a_primes[a]++;
}else{
a_primes[a]=1;
}
}
int k=0;
bool flag = true;
while(flag){
for(auto a_p : a_primes){
if(n_primes.count(a_p.first)&&n_primes[a_p.first]>=k*a_p.second){
continue;
}else{
flag=false;
break;;
}
}
if(flag)k++;
}
cout<<k-1<<endl;
}
// 64 位输出请用 printf("%lld")