#include using namespace std; int N, K, p_num; bool arr[200000]; int prime[18000] = {0}; bool used[10]; int dp[18000] = {0}; //dp[素数列の長さ] = 素数 void Eratosthenes(){ for(int i = 0; i <= N; i++) arr[i] = true; for(int i = 2; i <= sqrt(N); i++){ if(arr[i]){ for(int j = 0; i * (j + 2) < N; j++){ arr[i *(j + 2)] = false; } } } int j = 0; for(int i = K; i <= N; i++){ if(arr[i]){ if(i != 1) prime[j++] = i; } } p_num = j; } int Hash(int num){ string sum = to_string(num); while(sum.size() != 1){ num = 0; while(!sum.empty()){ num += sum[sum.size()- 1] - '0'; sum.pop_back(); } sum = to_string(num); } return sum[0] - '0'; } int main(void){ cin >> K >> N; Eratosthenes(); for(int i = 0; i < p_num; ++i){ int j, h_num; for(j = 0; j < 10; ++j) used[j] = false; for(j = 0; j < p_num && !used[(h_num = Hash(prime[i + j]))]; ++j) used[h_num] = true; if(dp[j] < prime[i]) dp[j] = prime[i]; } for(int i = p_num; i >= 0; --i){ if(dp[i] != 0){ cout << dp[i] << endl; break; } } return 0; }