#include<iostream>
#include<vector>
#include<string>
#include<array>
#include<algorithm>
#include<list>
#include<cmath>
#include<iomanip>
#include<queue>
#include<functional>
#include<climits>
#include<iterator>
#include<unordered_set>
#include<unordered_map>
#include<map>
#include<stack>
#include<set>
using namespace std;

const double pi=4*atan(1.0);

constexpr long long mod=static_cast<long long>(1e9+7);

using cWeightEdges=vector<vector<pair<int,int>>>;
using cEdges=vector<vector<int>>;

long long gcd(long long a,long long b){
	if(a < b)swap(a,b);
	if(b < 1) return -1;

	if(a % b == 0) return b;
	return gcd(b,a % b);
}

int main(){
	long long A,B;
	cin>>A>>B;
	long long C=A+B;
	long long gcd_a=gcd(A,C);
	C/=gcd_a;
	long long gcd_b=gcd(B,C);
	cout<<gcd_a*gcd_b<<endl;
	//system("pause");
	return 0;
}