Cod sursa(job #438141)
var pi,pp:array[1..1000] of longint;
p,q,i,j,x,n,pas:longint;
procedure divizori(p,q:longint);
var k,putere:int64;
begin
k:=trunc(sqrt(p));
for i:=2 to k do
begin
putere:=0;
while p mod i=0 do
begin
inc(putere);
p:=p div i;
end;
if putere>0 then
begin
inc(j);
pi[j]:=i;
pp[j]:=putere*q;
end;
end;
if p>1 then
begin
inc(j);
pi[j]:=p;
pp[j]:=q;
end;
end;
function putere(x,y:int64):int64;
var xy:int64;
begin
xy:=0;
while(x<>0) do
begin
xy:=xy+x div y;
x:=x div y;
end;
putere:=xy;
end;
function verif(n:int64):boolean;
begin
verif:=true;
for i:=1 to j do
if putere(n,pi[j])<pp[i] then
begin
verif:=false;
break;
end;
end;
function caut:int64;
var x:int64;
pas:int64;
begin
x:=0;pas:=1 shl 30;
while pas<>0 do
begin
if not verif(x+pas) then x:=x+pas;
pas:=pas shr 1;
end;
caut:=x;
end;
begin
assign(input,'gfact.in');
assign(output,'gfact.out');
reset(input);
rewrite(output);
readln(p,q);
divizori(p,q);
writeln(caut+1);
close(output);
end.