#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10, INF = 0x3f3f3f3f;
int n, m;
int f[N];//f[i]表示跳到i号石板上所需的最小次数
int main()
{
cin >> n >> m;
memset(f, 0x3f, sizeof f);
f[n] = 0;
for (int i = n; i <= m; i ++)
{
if (f[i] == INF) continue;//可写可不写
for (int j = 2; j * j <= i; j ++)
if (i % j == 0)
{
if (i + j <= m) f[i + j] = min(f[i + j], f[i] + 1);
if (i + i / j <= m) f[i + i/j] = min(f[i + i/j], f[i] + 1);
}
}
if (f[m] == INF) f[m] = -1;
cout << f[m] << endl;
return 0;
}
京公网安备 11010502036488号