#define int long long intbruteforce(int n, int R){ int ans = 1e9; for (int r = 2; r <= R; r++) { int x = n; int sum = 0; while (x) { sum += x % r; x /= r; } ans = min(ans, sum); } return ans; }
intsolve(int n, int R){ if (n <= 1e5) returnbruteforce(n, R); int m = powl(n, 1.0l / 3.0l); if (R <= m) returnbruteforce(n, R); int ans = bruteforce(n, m); for (int c1 = 0; c1 <= ans; c1++) { for (int c2 = 0; c1+c2 <= ans; c2++) { for (int c3 = 0; c1+c2+c3 <= ans; c3++) { if (c1 == 0 && c2 == 0) break; if (c1 == 0) { if ((n - c3) % c2) continue; int r = (n - c3) / c2; if (r <= m || r > R || c1 >= r || c2 >= r || c3 >= r) continue; ans = min(ans, c1+c2+c3); } else { int delta = c2 * c2 - 4 * c1 * (c3 - n); if (delta < 0) continue; int k = sqrtl(delta); if (k * k != delta) continue; if (-c2 + k < 0 || (-c2 + k) % (2 * c1)) continue; int r = (-c2 + k) / (2 * c1); if (r <= m || r > R || c1 >= r || c2 >= r || c3 >= r) continue; ans = min(ans, c1+c2+c3); } } } } return ans; }
signedmain(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int T; cin >> T; while (T--) { int n, R; cin >> n >> R; cout << solve(n, R) << '\n'; } return0; }