#include using namespace std; #define FOR(i,n) for(int i = 0; i < (n); i++) #define sz(c) ((int)c.size()) #define ten(n) ((int)1e##n) using ll = long long; //素数列挙 bool prime[ten(5)]; vector prs; void init_prime() { memset(prime, 1, sizeof(prime)); prime[0] = prime[1] = false; for (int i = 2; i < sizeof(prime); i++) if (prime[i]) for (int j = i * 2; j < sizeof(prime); j += i) prime[j] = false; for (int i = 2; i < sizeof(prime); i++) if (prime[i]) prs.push_back(i); } ll dv(ll x) { for (auto p : prs) if (x % p == 0) return p; return x; } ll solve(ll l, ll h) { for (int i = sz(prs) - 1; i >= 0; i--) { if (prs[i] * prs[i] > h) continue; for (ll a = h / prs[i]; a * prs[i] >= l; a--) { ll x = dv(a); if (x >= prs[i]) return prs[i] * a; } } return h - h % 2; } int main() { init_prime(); ll l, h; cin >> l >> h; ll ans = solve(l,h); cout << ans << endl; return 0; }