#include<stdio.h>
struct node
{
int step;
int x;
}s,temp;
struct node que[100006];
int n,k;
int vis[100006];
int bfs(int step,int x)
{
int f=0,r=0;
s.step=step;
s.x=x;
que[r]=s;
vis[x]=1;
r++;
while(f<r)
{
node p=que[f]; f++;
if(p.x==k)
return p.step;
if(p.x*2<100001 && vis[p.x*2]!=1) //注意p.x不是x***
{
temp.step=p.step+1;
temp.x=p.x*2;
que[r]=temp;
vis[p.x*2]=1;
r++;
}
if(p.x+1<100001 && vis[p.x+1]!=1)
{
temp.step=p.step+1;
temp.x=p.x+1;
que[r]=temp;
vis[p.x+1]=1;
r++;
}
if(p.x-1>=0 && vis[p.x-1]!=1)
{
temp.step=p.step+1;
temp.x=p.x-1;
que[r]=temp;
vis[p.x-1]=1;
r++;
}
}
return 0;
}
int main()
{
scanf("%d%d",&n,&k);
printf("%d",bfs(0,n));
return 0;
}
/*
5 17
4
*/