//@author: yzj Date:2015/07/26
//sourse : http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82603#problem/A
//meaning: 农夫追牛,农夫每次可以走2*x, x-1 或 x+1三种方式,求最小时间
#include <iostream>
#include <cstdio>
#include <queue>
using namespace std;
const int MAXN = 100000+5;
int n, k;
bool vis[MAXN];
int step[MAXN];
queue<int> que;
int bfs(int pos)
{
que.push(pos);
vis[pos] = true;
step[pos] = 0;
while(!que.empty())
{
int head, next;
head = que.front();
que.pop();
for(int i = 0; i < 3; i++)//枚举三种方法
{
if(i == 0)
{
next = head * 2;
}
else if(i == 1)
{
next = head + 1;
}
else
{
next = head - 1;
}
//超出界限, 跳过
if(next < 0 || next > MAXN || vis[next]) continue;
else
{
que.push(next);
step[next] = step[head] + 1;
vis[next] = true;
}
//广搜的特性,返回的第一个一定是最短的路径
if(next == k) return step[next];
}
}
}
int main()
{
//freopen("f:/yzj/cppCode/input.txt", "r", stdin);
scanf("%d %d", &n, &k);
if(n >= k) printf("%d\n", n-k);
else printf("%d\n", bfs(n));
return 0;
}