#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; }