#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define fs first #define sc second using namespace std; typedef long long ll; typedef unsigned int uint; typedef pair P; // a と b の最大公約数を返す ll gcd(ll a, ll b) { if (b == 0) return a; else return gcd(b, a % b); } ll lcm(ll a, ll b){ return a / gcd(a, b) * b; } // 素数判定 bool is_prime(ll N) { if (N == 1) return false; for (ll i = 2; i * i <= N; ++i) { if (N % i == 0) return false; } return true; } // 約数列挙 vector enum_divisors(ll N) { vector res; for (ll i = 1; i * i <= N; ++i) { if (N % i == 0) { res.push_back(i); if (N/i != i) res.push_back(N/i); } } sort(res.begin(), res.end()); return res; } // 素因数分解 vector> prime_factorize(ll N){ vector> res; for(ll i = 2; i * i <= N; i++){ if(N % i != 0) continue; ll ex = 0; while(N % i == 0){ ex++; N /= i; } res.push_back({i, ex}); } if(N != 1) res.push_back({N, 1}); return res; }; int main(){ ll a, b; cin >> a >> b; ll c = gcd(a, b); cout << c * gcd(a / c + b / c, c) << endl; return 0; }