#include<iostream>
#include<algorithm>
#include<cstdio>
#include<string>
#include<vector>
#include<string.h>
#include<map>
#include<cmath>
#include<queue>
#define ll long long
#define INF 0x7fffffff
#define MAX 0x3f3f3f3f
#define maxn 1000005
#define ull unsigned long long
using namespace std;
bool f[maxn];
int n,k;
struct node
{
int floor,step;
};
int bfs()
{
queue<node> q;
node a,b;
a.floor=n;a.step=0;
f[n]=1;
q.push(a);
while(!q.empty())
{
a=q.front();
q.pop();
if(a.floor==k)
return a.step;
b=a;
b.floor=a.floor+1;
if(b.floor>=0&&b.floor<maxn-5&&!f[b.floor])
{
b.step=a.step+1;
f[b.floor]=1;
q.push(b);
}
b.floor=a.floor-1;
if(b.floor>=0&&b.floor<maxn-5&&!f[b.floor])
{
b.step=a.step+1;
f[b.floor]=1;
q.push(b);
}
b.floor=a.floor*2;
if(b.floor>=0&&b.floor<maxn-5&&!f[b.floor])
{
b.step=a.step+1;
f[b.floor]=1;
q.push(b);
}
}
return -1;
}
int main()
{
int num;
while(~scanf("%d%d",&n,&k))
{
memset(f,0,sizeof(f));
num=bfs();
printf("%d\n",num);
}
return 0;
}