import java.util.ArrayList; import java.util.Arrays; import java.util.BitSet; import java.util.List; import java.util.Scanner; public class Main_yukicoder6 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int k = sc.nextInt(); int n = sc.nextInt(); List primes = new ArrayList(); BitSet sieve = new BitSet(); if (k <= 2) { primes.add(2); } for (int i = 1; 2 * i + 1 <= n; i++) { if (!sieve.get(i)) { int p = 2 * i + 1; if (p >= k) { primes.add(p); } for (int j = 1; (i + (2 * i + 1) * j) * 2 + 1 <= n; j++) { sieve.set(i + (2 * i + 1) * j); } } } int[] prev = new int[10]; Arrays.fill(prev, -1); List dp = new ArrayList(); List hash = new ArrayList(); int max = 0; int maxp = 0; for (int i = 0; i < primes.size(); i++) { int p = primes.get(i); String s = Integer.toString(p); while (s.length() > 1) { int sum = 0; for (char c : s.toCharArray()) { sum += c - '0'; } s = Integer.toString(sum); } hash.add(Integer.parseInt(s)); int tmp = i - prev[hash.get(i)]; for (int j = dp.size() - 1; j >= 0 && j >= dp.size() - 10; j--) { if (hash.get(j) == hash.get(i)) { tmp = Math.min(tmp, i - j); } else { tmp = Math.min(tmp, dp.get(j) + i - j); } } dp.add(tmp); if (tmp >= max) { max = Math.max(max, tmp); maxp = primes.get(i - tmp + 1); } } // System.out.println(max); System.out.println(maxp); sc.close(); } }