#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
typedef long long LL;
const LL N = 1500005;
LL v[5]={-1,1,0,0,0};
LL visit[N+10]={0};
LL Binary(int x)
{
LL cnt = 0;
while(1)
{
if(x%2==1) cnt++;
if(x/2==0) return cnt;
x/=2;
}
}
struct Step
{
LL num;
LL steps;
};
queue<Step> q;
int bfs(int a,int b)
{
q.push(Step{a,0});
while(!q.empty())
{
Step s = q.front();
q.pop();
cout<<"s.num = "<<s.num<<endl;
LL cnt = Binary(s.num);
v[2] = cnt;
v[3] = -cnt;
if(s.num==b)
{
return s.steps;
}
for(int i=0;i<4;i++)
{
Step next ;
next.num = s.num + v[i];
next.steps = s.steps + 1;
if(next.num<0||next.num>b) continue;
if(visit[next.num]==1) continue;
q.push(next);
visit[next.num] = 1;
}
}
}
int main()
{
memset(visit,0,sizeof(visit));
int a,b;
cin>>a>>b;
visit[a] = 1;
LL ans = bfs(a,b);
cout<<ans<<endl;
return 0;
}