/*#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;
}