#include using namespace std; using namespace chrono; #if __has_include() #include using namespace atcoder; #endif int main() { int64_t l, r; cin >> l >> r; auto hash = [](int64_t x) -> int64_t { while (10 <= x) { int64_t y = 0; for (; x; x /= 10) { y += x % 10; } x = y; } return x; }; vector is_prime(r + 1, true); is_prime[0] = false; is_prime[1] = false; for (int64_t i = 2; i * i <= r; i++) { if (is_prime[i]) { for (int64_t j = 2 * i; j <= r; j += i) { is_prime[j] = false; } } } vector ps; for (int64_t i = l; i <= r; i++) { if (is_prime[i]) { ps.push_back(i); } } vector qs(ps.size()); for (int64_t i = 0; i < ps.size(); i++) { qs[i] = hash(ps[i]); } int64_t max_len = 0; int64_t start = 0; map mp; for (int64_t i = 0, j = 0; i < qs.size(); i++) { while (mp.contains(qs[i])) { mp[qs[j]]--; if (mp[qs[j]] == 0) { mp.erase(qs[j]); } j++; } mp[qs[i]]++; if (max_len <= i - j) { max_len = i - j; start = j; } } cout << ps[start] << endl; return 0; }