#include<stdio.h>
typedef long long ll;
int main(void) {
	ll a = 0, b = 0;
	scanf("%ld %ld", &a, &b);
    ll gcd(ll a,ll b);
// 	//辗转相除法:   当得到余数为0时,被除数即为最大公约数
	//最小公倍数*最大公约数=a*b
    printf("%ld",gcd(a,b)+(a*b)/gcd(a,b));
	return 0;
}
ll gcd(ll a,ll b){//b不为0一直做取余运算,递推到传入的b为0时,返回的是a的值即为当前余数
     //	严格来说小的数应该放在第二位,但使用递归时,第一次运算就会把大小数交换,不用人为交换
    //  eg:a=15,b=20; gcd(a,b) 按递推式有:a=20,b=a%b=15;
    return b?gcd(b,a%b):a;//b不为0为真时执行1 为0时执行2
};