/*#include <stdio.h>
int main() {
long m=0,n=0;
scanf("%ld %ld",&m,&n);
long x = m*n;
//求最大公倍数 (算法复杂度过大,不合题意)
long max = (m>n)?m:n;//三目运算符格式
while (max%m!=0 || max%n!=0) {
max++;
// 逻辑或运算符 ||。这意味着,只要 max 不满足其中一个整除条件,循环就会继续。而逻辑与运算符&&必须都满足整除条件才循环,故不成立。
}
printf("%ld",max+x/max);
return 0;
}*/
#include <stdio.h>
int main() {
long m = 0, n = 0;
scanf("%ld %ld", &m, &n);
long x = m * n; //最大公约数*最小公倍数之积等于两积LCM(m, n) = (m * n) / GCD(m, n)
// 辗转相除法求最大公约数
while ((m % n) != 0) {
int temp = m % n;
m = n;
n = temp; //好处:代码效率较高
}
printf("%ld", n + x / n);
return 0;
}