#include<bits/stdc++.h>
#define debug cout<<"here"
using namespace std;
const int Len=10004;
struct Int{
string s;
int num[Len+20];
int len;
void read(){
cin>>s;
len=s.size();
for(int i=0;i<len;i++){
num[len-i]=s[i]-'0';
}
}
void print(){
for(int i=len;i>=1;i--){
cout<<num[i];
}
cout<<'\n';
}
bool operator<(const Int&b)const{
if(len!=b.len){
return len<b.len;
}
for(int i=len;i>=1;i--){
if(num[i]!=b.num[i]){
return num[i]<b.num[i];
}
}
return 0;
}
bool operator>=(const Int&b)const{
return !((*this)<b);
}
Int operator-(const Int&b)const{
Int c;
int n=max(len,b.len);
c.len=n;
for(int i=1;i<=n;i++){
c.num[i]+=num[i]-b.num[i];
if(c.num[i]<0){
c.num[i+1]-=1;
c.num[i]+=10;
}
}
for(int i=n;i>=2;i--){
if(c.num[i]==0){
c.len--;
}
else{
break;
}
}
return c;
}
Int operator*(const int&b)const{
Int c;
int n=len+20;
c.len=n;
for(int i=1;i<=n;i++){
c.num[i]=num[i]*b;
}
for(int i=1;i<=n;i++){
if(c.num[i]>=10){
c.num[i+1]+=c.num[i]/10;
c.num[i]%=10;
}
}
for(int i=n;i>=2;i--){
if(c.num[i]==0){
c.len--;
}
else{
break;
}
}
return c;
}
Int operator/(const int&b)const{
if(b==0){
cerr<<"Error:Division by zero!"<<'\n';
exit(3221225620);
}
Int c;
int n=len,d=0;
c.len=n;
for(int i=n;i>=1;i--){
d=d*10+num[i];
c.num[i]=d/b;
d%=b;
}
for(int i=n;i>=2;i--){
if(c.num[i]==0){
c.len--;
}
else{
break;
}
}
return c;
}
bool is_zero()const{
return len==1&&num[1]==0;
}
};
bool check(Int a,Int b){
if(a.is_zero()||b.is_zero()){
return 0;
}
return 1;
}
Int GCD(Int a,Int b){
int cnt=0;
while(check(a,b)){
if(a.num[1]%2==0&&b.num[1]%2==0){
a=a/2;
b=b/2;
cnt++;
}
else if(a.num[1]%2==0&&b.num[1]%2==1){
a=a/2;
}
else if(a.num[1]%2==1&&b.num[1]%2==0){
b=b/2;
}
else{
if(a>=b){
a=a-b;
}
else{
b=b-a;
}
}
}
a=max(a,b);
for(int i=1;i<=cnt;i++){
a=a*2;
}
return a;
}
Int a,b,c;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
a.read();
b.read();
GCD(a,b).print();
return 0;
}