
#include <iostream>
#include <queue>
#include <cstring>
using namespace std;
struct node {
int x;
int step;
};
int n, k, vis[100010];
node s, e;
int bfs()
{
queue<node> q;
node t, p;
s.x = n;
s.step = 0;
vis[s.x] = 1;
q.push(s);
while(!q.empty())
{
t = q.front();
q.pop();
if(t.x == e.x) return t.step;
if(t.x < 0 || t.x > 100000)
continue;
// 向右走一步
if(t.x + 1 <= 100000 && vis[t.x + 1] == 0)
{
p.x = t.x + 1;
p.step = t.step + 1;
vis[p.x] = 1;
q.push(p);
}
// 向左走一步
if(t.x - 1 >= 0 && vis[t.x - 1] == 0)
{
p.x = t.x - 1;
p.step = t.step + 1;
vis[p.x] = 1;
q.push(p);
}
// 向右走两倍步数
if(t.x * 2 <= 100000 && vis[t.x * 2] == 0)
{
p.x = t.x * 2;
p.step = t.step + 1;
vis[p.x] = 1;
q.push(p);
}
}
return 0;
}
int main()
{
int result;
while(cin >> n >> k)
{
memset(vis, 0, sizeof(vis));
s.x = n, e.x = k;
result = bfs();
cout << result << endl;
}
return 0;
}