#include #include using namespace std; using i32 = int; using i64 = long long; using i128 = __int128_t; using f64 = double; using p2 = pair; using p3 = tuple; using mint = atcoder::modint998244353; void _main(); int main() { cin.tie(0); ios::sync_with_stdio(false); cout << fixed << setprecision(18); _main(); } void _main() { i64 l, r; cin >> l >> r; r++; vector isprime(30000000, true); isprime[0] = isprime[1] = false; vector prime; for (i32 i = 2; i < isprime.size(); i++) { if (!isprime[i]) continue; prime.push_back(i); for (i32 j = i + i; j < isprime.size(); j += i) { isprime[j] = false; } } for (i64 i = l; i < r; i++) { if (i % 45 != 0 || i == 45) continue; i64 x = i / 45; if (x % 2 == 0 || x % 3 == 0 || x % 5 == 0) continue; bool ok = true; for (i32 p : prime) { if (p <= 5) continue; if (p * p > x) break; ok &= x % p != 0; } if (ok) { cout << i << "\n"; return; } } for (i64 i = l; i < r; i++) { if (i % 2 == 0) continue; i64 x = i; i64 a = -1, b = -1, c = -1; bool ok = true; for (i64 p : prime) { if (p * p > x) break; if (x % p != 0) continue; if (x % (p * p) == 0) { ok &= a == -1 && x % (p * p * p) != 0; a = p; x /= a * a; continue; } ok &= a != -1; if (b == -1) { b = p; x /= b; } else { ok &= p == x; c = x; x /= c; } } c = x; if (a == -1 || b == -1 || c == -1 || !ok || c == 1) continue; assert(a < b && b < c); cout << i << "\n"; return; } cout << "-1\n"; }