// 百度空间太 2B 了。一点儿都不好用,垃圾。
// 非 STL 版。
// (C++) AC 916K 16MS (C:编译错误)
// (G++ / Gcc) AC 1104K 16MS
#include <stdio.h>
int main() {
int visited[100001] = {0};
int queue[100001] = {0};
int qBegin = 0, qEnd = 0;
int N, K;
scanf("%d %d", &N, &K);
if (N == K) {
puts("0");
return 0;
}
visited[N] = 1;
queue[qEnd++] = N;
for (int i = 1; N != K; ++i) { //
int layer = qEnd;
while (qBegin < layer) {
N = queue[qBegin++];
if (N > 0 && !visited[N - 1]) {
visited[N - 1] = 1;
if (N - 1 == K) { printf("%d\n", i); return 0; }
queue[qEnd++] = N - 1;
}
if (N < 100000 && !visited[N + 1]) {
visited[N + 1] = 1;
if (N + 1 == K) { printf("%d\n", i); return 0; }
queue[qEnd++] = N + 1;
}
if (2 * N <= 100000 && !visited[2 * N]) {
visited[2 * N] = 1;
if (2 * N == K) { printf("%d\n", i); return 0; }
queue[qEnd++] = 2 * N;
}
}
}
return 0;
}