#include <cstdio>
#include <queue>
#define MAXN 100003
using namespace std;
struct qNode
{
int data;
int level;
};
int main(void)
{
bool visited[MAXN]={0};
queue<qNode> q;
qNode *p,*n1,*n2,*n3;
int start,target;
scanf("%d%d",&start,&target);
if(start>=target)
{
printf("%d\n",start-target);
}
else
{
p=new qNode;
n1=new qNode;
n2=new qNode;
n3=new qNode;
p->data=start;
p->level=0;
visited[start]=true;
q.push(*p);
while(q.size()>0)
{
*p=q.front();
q.pop();
if(p->data==target)
{
printf("%d\n",p->level);
break;
}
if( p->data+1<MAXN && visited[p->data+1]==false)
{
n1->data=p->data+1;
visited[p->data+1]=true;
n1->level=p->level+1;
q.push(*n1);
}
if( p->data-1>=0 && visited[p->data-1]==false)
{
n2->data=p->data-1;
visited[p->data-1]=true;
n2->level=p->level+1;
q.push(*n2);
}
if(p->data*2<MAXN && visited[p->data*2]==false)
{
n3->data=p->data*2;
visited[p->data*2]=true;
n3->level=p->level+1;
q.push(*n3);
}
}
}
return 0;
}