/*#include <bits/stdc++.h>
using namespace std;
int n, lef[200001], rig[200001], all[200001], ans[200001], arr[50001];
void make(int node, int start, int End)
{
if(start==End)
{
lef[node]=rig[node]=all[node]=ans[node]=arr[End];
return ;
}
int mid=(start+End)/2;
make(node*2, start, mid);
make(node*2+1, mid+1, End);
lef[node]=max(lef[node*2], all[node*2]+lef[node*2+1]);
rig[node]=max(rig[node*2+1], all[node*2+1]+rig[node*2]);
all[node]=all[node*2]+all[node*2+1];
ans[node]=max(max(ans[node*2], ans[node*2+1]), rig[node*2]+lef[node*2+1]);
}
int le(int node, int start, int End, int l, int r)
{
if(End<start)return -2147483647;
if(start>=l&&End<=r)return lef[node];
if(start>r||End<l)return -2147483647;
int mid=(start+End)/2;
int ret=le(node*2, start, min(mid, r), l, r);
if(mid>=l&&mid+1<=r)
ret=max(ret, ans[node*2]+le(node*2+1, max(mid+1, l), End, l, r));
return ret;
}
int ri(int node, int start, int End, int l, int r)
{
if(End<start)return -2147483647;
if(start>=l&&End<=r)return rig[node];
if(start>r||End<l)return -2147483647;
int mid=(start+End)/2;
int ret=ri(node*2+1, max(l, mid+1), End, l, r);
if(mid>=l&&mid+1<=r)ret=max(ret, ans[node*2+1]+ri(node*2, start, min(mid, r), l, r));
return ret;
}
int Ans(int node, int start, int End, int l, int r)
{
if(start>=l&&End<=r)return ans[node];
if(start>r||End<l)return -2147483647;
int mid=(start+End)/2;
int ret=max(Ans(node*2, start, mid, l, r), Ans(node*2+1, mid+1, End, l, r));
if(mid>=l&&mid+1<=r)
{
ret=max(ret, le(1, 1, n, mid+1, min(r, End))+ri(1, 1, n, max(l, start), mid));
}
return ret;
}
int main()
{
scanf("%d", &n);
for(int i=1;i<=n;i++)scanf("%d", &arr[i]);
int m, a, b;
make(1, 1, n);
scanf("%d", &m);
while(m--)
{
scanf("%d %d", &a, &b);
printf("%d\n", Ans(1, 1, n, a, b));
}
}*/
/*
#include <bits/stdc++.h>
using namespace std;
int main()
{
int arr[2000]={};
int n, a;
scanf("%d", &n);
for(int i=1;i<=n;i++)
{
scanf("%d", &a);
arr[a]++;
}
vector<int> ans[20001];
for(int i=1;i<=n;i++)
{
//if(arr[i]==0)continue;
ans[arr[i]].push_back(i);
}
sort(arr, arr+1001);
//printf("%d\n", arr[1000]);
int b, c, d, temp=arr[1000];
for(int i=1000;i>=1;i--)
{
if(arr[i]!=temp)
{
temp=arr[i];
break;
}
}
//printf("%d\n", ans[arr[1000]][0]);
//sort(ans[arr[1000]].begin(), ans[arr[1000]].end());
// sort(ans[temp].begin(), ans[temp].end());
int ba1=ans[arr[1000]][0], sa1=ans[arr[1000]][0], ba2=ans[temp][0], sa2=ans[temp][0];
for(int i=0;i<ans[arr[1000]].size();i++)
{
ba1=max(ba1, ans[arr[1000]][i]);
sa1=min(sa1, ans[arr[1000]][i]);
}
for(int i=0;i<ans[temp].size();i++)
{
ba2=max(ba2, ans[temp][i]);
sa2=min(sa2, ans[temp][i]);
}
int real=max(abs(ba1-sa2), abs(sa1-ba2));
printf("%d", real);
}*/
/*
#include <bits/stdc++.h>
using namespace std;
void haha(int x, int y)
{
if(y==0)return ;
if(x==0){
printf("\n");
haha(y-1, y-1);
return ;
}
printf("*");
haha(x-1, y);
}
int main()
{
int n;
scanf("%d", &n);
haha(n, n);
}*/
#include <bits/stdc++.h>
using namespace std;
void haha(int x, int y)
{
if(x==y)
{
printf("%d", x);
return ;
}
if(x>y)
{
haha(x/2, y);
}
else
{
haha(x, y/2);
}
}
int main()
{
int a, b;
scanf("%d %d", &a, &b);
haha(a, b);
}



