/* -*- coding: utf-8 -*- * * 371.cc: No.371 ぼく悪いプライムじゃないよ - yukicoder */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; /* constant */ const int MAX_P = 100000; /* typedef */ typedef long long ll; typedef vector vi; /* global variables */ bool primes[MAX_P + 1]; /* subroutines */ void gen_primes(int maxp, vi &pnums) { memset(primes, true, sizeof(primes)); primes[0] = primes[1] = false; int p; for (p = 2; p * p <= maxp; p++) if (primes[p]) { pnums.push_back(p); for (int q = p * p; q <= maxp; q += p) primes[q] = false; } for (; p <= maxp; p++) if (primes[p]) pnums.push_back(p); } /* main */ int main() { vi pnums; gen_primes(MAX_P, pnums); //printf("%lu\n", pnums.size()); ll l, h; cin >> l >> h; ll ans = 0; for (int i = pnums.size() - 1; i >= 0; i--) { ll pi = pnums[i]; if (pi * pi > h) continue; ll minx = max(l, pi * pi), x; for (x = h; x >= minx; x--) { if (x % pi != 0) continue; ll y = x / pi; bool ok = true; for (int j = 0; ok && j < i; j++) ok = (y % pnums[j] != 0); if (ok) break; } if (x >= minx) { ans = x; break; } } printf("%lld\n", ans); return 0; }