var
{opt:array[cardinal] of int64;}
i,p,k,j:qword;
function proizv(a:qword):qword;
var j:qword;
i:qword;
begin
{if (opt[a]<>0)or(a=0) then proizv:=opt[a]
                      else} begin
                      i:=1;
                           repeat
                           inc(i);
                           {for i:=2 to trunc(sqrt(a))+1 do}
                            if a mod i =0 then break;
                           until i>=trunc(sqrt(a))+1;
                           if (i=trunc(sqrt(a))+1)or(a<=1) then j:=1
                                                 else j:=proizv(i)*(a div i)+proizv(a div i)*i;
                           if a<=1 then j:=0;
                           {opt[a]:=j;}
                           proizv:=j;
                           end;
end;
begin
readln(p,k);
 j:=p;
 i:=0;
  repeat
  inc(i);
  j:=proizv(j);
  until i=k;
 writeln(j);
end.
