#include <iostream>
#include <stdlib.h>
#include <bitset>
#include <iomanip>
#include <cmath>
#include <algorithm>
#include <numeric>
#include <vector>
#include <string>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 1e8 + 10;
bitset <maxn> pri;
int chosen[maxn];
int pp = 0;
inline void eular(int a) {
for (int i = 2; i <= a ; i += 1) {
if (!pri[i])
chosen[++pp] = i;
for (int j = 1; j <= pp && chosen[j] *i <= a; j++) {
pri[i * chosen[j]] = 1;
if (!i % chosen[j] )
break;
}
}
}
inline bool access(int e) {
int temp = e, ans = 0;
while (temp) {
ans += (temp % 10);
temp /= 10;
if (temp > 0)
ans *= 10;
}
return (ans == e ? 1 : 0);
}
int main() {
int b, a, p;
scanf ("%d %d", &b, &a);
eular(a);
for (int i = 1; i <= pp; i++) {
if (b <= chosen[i]) {
p = i;
break;
}
}
for (int i = p; i <= pp; i++) {
if (access(chosen[i]))
printf("%d\n", chosen[i]);
}
}