1 /*
2 BJFU fudq的等式
3 http://101.200.220.237/contest/19/problem/118/
4 数论 勒让德定理 二分答案
5 */
6 #include <cstdio>
7 #include <algorithm>
8 #include <cstring>
9 #include <cmath>
10 #include <vector>
11 #include <queue>
12 //#define test
13 using namespace std;
14 const int Nmax=1000005;
15 const long long INF=100000000000005LL;
16 long long p[Nmax];
17 long long times[Nmax];
18 int cnt;
19 long long n,x,y;
20
21 long long Legendre(long long n,long long p,long long y)
22 {
23 long long ans=0LL;
24 while(n>0)
25 {
26 ans+=n/p;
27 if(ans>y)
28 return y+1LL;
29 n/=p;
30 }
31 return ans;
32 }
33
34 int is(long long n)
35 {
36 for(int i=1;i<=cnt;i++)
37 {
38 if(Legendre(n,p[i],times[i]*y)<times[i]*y)
39 return 0;
40 }
41 return 1;
42 }
43 long long get()
44 {
45 long long n=0LL;
46 long long l=1LL,r=INF;
47 while(l<r)
48 {
49 long long mid=(l+r)>>1;
50 long long m=is(mid);
51 //printf("l:%lld r:%lld mid:%lld x:%lld y:%lld num:%lld\n",l,r,mid,x,y,m);
52 if(!m)
53 l=mid+1;
54 else
55 r=mid-1;
56 }
57 if(n==0LL && !is(r))
58 n=r+1;
59 else if(n==0LL && is(r))
60 n=r;
61 return n;
62
63 }
64 //long long get()
65 //{
66 //long long m=-1LL;
67 //for(int i=1;i<=cnt;i++)
68 //{
69 //m=max(m,get(p[i],times[i]*y));
70 //}
71 //return m;
72 //}
73 int main()
74 {
75 #ifdef test
76 #endif
77 //freopen("test.in","r",stdin);
78 while(scanf("%lld%lld",&x,&y)==2)
79 {
80 cnt=0;
81 for(int i=2;i*i<=x;i++)
82 {
83 if(x%i==0)
84 {
85 p[++cnt]=i;
86 times[cnt]=0;
87 while(x%i==0)
88 {
89 x/=i;
90 times[cnt]++;
91 }
92 }
93 }
94 if(x!=1)
95 {
96 p[++cnt]=x;
97 times[cnt]=1;
98 }
99
100 if(cnt==0)
101 {
102 //printf("error\n");
103 printf("0\n");
104 continue;
105 }
106 printf("%lld\n",get());
107 }
108 return 0;
109 }