program cmmdc;
const prim:array[1..40] of byte= (2,3,5,7,11,13,17,19,23,29,31,37,41,
43,47,53,59,61,67,71,73,79,83,89,97,
101,103,107,109,113,127,131,137,139,
149,151,157,163,167,173);
var ao,bo:array[1..40] of byte;
i,j:byte;
lk,a,b,e:word;
f:text;
function lnko(a,b:word):word;
begin
for i:=1 to 40 do
begin
while(a mod prim[i] = 0) do
begin
a:=a div prim[i];
inc(ao[i]);
end;
end;
for i:=1 to 40 do
begin
while(b mod prim[i] = 0) do
begin
b:=b div prim[i];
inc(bo[i]);
end;
end;
lk:=1;
for i:=1 to 40 do
begin
if(ao[i] <> 0) and (bo[i] <> 0) then
begin
if (ao[i]<bo[i]) then
begin
for j:=1 to ao[i] do
lk:=lk*prim[i];
end else
begin
for j:=1 to bo[i] do
lk:=lk*prim[i];
end;
end;
end;
if(a=b) and (a<>1) then
lk:=lk*a;
lnko:=lk;
end;
begin
assign(f,'cmmdc.in');
reset(f);
readln(f,a,b);
close(f);
assign(f,'cmmdc.out');
rewrite(f);
e:=lnko(a,b);
if(e=1) then write(f,0) else
write(f,e);
close(f);
end.