#include<bits/stdc++.h>
#define la aa.size()
#define lb bb.size()
#define al (int)(aa[(la)-1]-'0')
#define bl (int)(bb[(lb)-1]-'0')
#define debug(a,b) cerr<<a<<" "<<b<<"\n";
using namespace std;
const int N=1e5+5;
string s1,s2,ans;
int n,h,len,len1,len2,f,a[N],b[N],c[N],qwq;
int sstoi(string s)
{
int x=0;char c;
for(int i=0;i<s.size();i++)c=s[i],x=x*10+c-'0';
return x;
}
string itos(int x)
{
string s;
while(x)
{
s=s+(char)(x%10+'0');
x/=10;
}
return s;
}
string chu(string s,int x)
{
ans="";
len=s.size(),f=0;
for(int i=0;i<len;i++)
{
h=f*10+(s[i]-'0');
ans=ans+(char)((int)(h/x)+'0');
f=h%x;
}
while(ans[0]=='0')ans.erase(ans.begin());
return ans;
}
string cheng1(string s1,string s2)
{
ans="";
len1=s1.size(),len2=s2.size();
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
for(int i=0;i<len1;i++)a[len1-i-1]=s1[i]-'0';
for(int i=0;i<len2;i++)b[len2-i-1]=s2[i]-'0';
for(int i=0;i<len1;i++)
for(int j=0;j<len2;j++)
c[i+j]+=a[i]*b[j];
int l=len1+len2-1;
for(int i=0;i<l;i++)
{
c[i+1]+=c[i]/10;
c[i]%=10;
}
if(c[l]>0)l++;
while(c[l-1]>=10)
{
c[l]=c[l-1]/10;
c[l-1]%=10;
l++;
}
while(c[l-1]==0&&l>1)l--;
for(int i=l-1;i>=0;i--)ans=ans+(char)(c[i]+'0');
return ans;
}
string cheng(string s,int x)
{
ans="";
len=s.size(),f=0;
for(int i=len-1;i>=0;i--)
{
h=f+x*((s[i]-'0'));
ans=(char)((h%10)+'0')+ans;
f=h/10;
}
if(f)ans=(char)(f+'0')+ans;
return ans;
}
string jian(string s1,string s2)
{
len1=s1.size(),len2=s2.size(),f=0;
ans="";
for(int i=len1-1,j=len2-1;i>=0&&j>=0;i--,j--)
{
h=s1[i]-s2[j]-f;
if(h<0)h+=10,f=1;
else f=0;
ans=(char)(h+'0')+ans;
}
if(len1>len2)
{
for(int i=len1-len2-1;i>=0;i--)
{
h=s1[i]-'0'-f;
if(h<0)h+=10,f=1;
else f=0;
ans=(char)(h+'0')+ans;
}
}
else
{
for(int i=len2-len1-1;i>=0;i--)
{
h=s2[i]-'0'-f;
if(h<0)h+=10,f=1;
else f=0;
ans=(char)(h+'0')+ans;
}
}
while(ans[0]=='0')ans.erase(ans.begin());
return ans;
}
bool operator==(string s1,string s2)
{
if(s1.size()!=s2.size())return 0;
for(int i=0;i<s1.size();i++)
if(s1[i]!=s2[i])
return 0;
return 1;
}
bool operator<(string s1,string s2)
{
if(s1.size()!=s2.size())return s1.size()<s2.size();
for(int i=0;i<s1.size();i++)
if(s1[i]!=s2[i])
return s1[i]<s2[i];
return 0;
}
string solve(string aa,string bb)
{
int s=0;
if(a<b)swap(a,b);
while(!(al&1)&&!(bl&1)){++s;aa=chu(aa,2);bb=chu(bb,2);}
while(!(aa==bb))
{
int ta=al&1,tb=bl&1;
!ta?aa=chu(aa,2):(!tb?bb=chu(bb,2):aa=jian(aa,bb));
if(aa<bb)swap(aa,bb);
}
while(s--)aa=cheng(aa,2);
return aa;
}
int main()
{
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>s1>>s2;
cout<<solve(s1,s2);
return 0;
}