#include #define show(x) cerr << #x << " = " << x << endl using namespace std; using ll = long long; using pii = pair; using vi = vector; template ostream& operator<<(ostream& os, const vector& v) { os << "sz=" << v.size() << "\n["; for (const auto& p : v) { os << p << ","; } os << "]\n"; return os; } template ostream& operator<<(ostream& os, const pair& p) { os << "(" << p.first << "," << p.second << ")"; return os; } constexpr ll MOD = (ll)1e9 + 7; constexpr ll MAX = 10000000000LL; constexpr ll SQRT = 100000LL; template constexpr T INF = numeric_limits::max() / 100; ll mindiv(const ll n) { for (ll i = 2; i * i <= n; i++) { if (n % i == 0) { return i; } } return 0; } int main() { cin.tie(0); ios::sync_with_stdio(false); ll L, H; cin >> L >> H; ll sup = 1; for (; sup * sup <= H; sup++) { } sup--; vector isprime(sup, true); for (ll i = 2; i <= sup; i++) { if (isprime[i]) { for (ll j = 2; i * j <= sup; j++) { isprime[i * j] = false; } } } vector prime; for (ll i = sup; i >= 2; i--) { if (isprime[i]) { prime.push_back(i); } } ll maxi = 0; ll maxnum = 0; for (const ll i : prime) { const ll sp = H / i; for (ll j = sp; i * j >= L; j--) { const ll d = mindiv(i * j); if (maxi < d) { maxi = d; maxnum = i * j; } else if (maxi == d) { maxnum = max(maxnum, i * j); } else { break; } } } cout << maxnum << endl; return 0; }