#include <fstream>
#include <climits>
#include <cmath>
#define NMAX 45000
using namespace std;
ifstream cin("gfact.in");
ofstream cout("gfact.out");
int ciur[NMAX],pp[NMAX],k;
int main(){
int p,q;
cin >> p >> q;
for(int i=3; i*i<=NMAX; i+=2){
if(ciur[i]==0){
for(int j=i*i; j<=NMAX; j+=i){
ciur[j]=1;
}
}
}
pp[k++]=2;
for(int i=3;i<=p;i+=2){
if(!ciur[i]){pp[k++]=i;}
}
int p1=p;
//for(int i=0;i<k;i++){cout<<pp[i]<<" ";}
int desc_p[NMAX]={0},exp_p[NMAX]={0};
int h1=0;
for(int i=0;i<k && pp[i]*pp[i]<=p;i++){
int c=0;
while(p1%pp[i]==0 && p1>0){
c++;
p1/=pp[i];
}
if(c>0 ){desc_p[h1]=pp[i],exp_p[h1]=c;h1++;}
}
if(p1>1){desc_p[h1]=p1,exp_p[h1]=1;h1++;}
//for(int i=0;i<h1;i++){cout<<desc_p[i]<<" "<<exp_p[i]<<" ";}
int st=0,dr=INT_MAX,mid,mn;
mn=dr;
while( dr-st>1){
mid= (st+dr) /2; int mid1=mid,s=0,mnn=INT_MAX;
for(int i=0;i<h1;i++){
while(mid1>0){
mid1/=desc_p[i];
s+=mid1;
}
mnn=min(mnn,s/exp_p[i]);
}
if(mnn>=q){mn=min(mn,mid);dr=mid;}
else{st=mid;}
}
cout<<mn;
return 0;
}