public final class dwite200602p5 extends DwiteSolution {

  public static void main(String[] args) {
    new dwite200602p5().run("DATA51.txt", "OUT51.txt");
  }

  private static boolean[] isPrime = DwiteAlgorithm.sievePrimes(1000000);

  protected void runOnce() {
    // Read input
    io.tokenizeLine();
    int start = io.readIntToken();
    int end = io.readIntToken();

    // Compute
    int palin = 0;
    for (int i = start; i <= end; i++) {
      if (isPrime[i] && isPalindrome(i)) palin++;
    }

    // Write output
    io.println(palin);
  }

  private static boolean isPalindrome(int x) {
    String s = Integer.toString(x);
    return new StringBuilder(s).reverse().toString().equals(s);
  }
}
  protected void runOnce() {
    final int WIDTH = 10;
    final int HEIGHT = 10;

    // Read map and pad
    char[][] map = DwiteAlgorithm.newCharGrid(HEIGHT + 2, WIDTH + 2, '.');
    for (int i = 0; i < HEIGHT; i++) {
      String line = io.readLine();
      for (int j = 0; j < WIDTH; j++) map[i + 1][j + 1] = line.charAt(j);
    }
    io.readLine(); // Discard line of hyphens

    // Initialize distances
    int[][] distance = new int[HEIGHT + 2][WIDTH + 2];
    for (int i = 0; i < HEIGHT + 2; i++) {
      for (int j = 0; j < WIDTH + 2; j++) {
        switch (map[i][j]) {
          case '.':
            distance[i][j] = 999;
            break;
          case 'T':
            distance[i][j] = 999;
            break;
          case 'F':
            distance[i][j] = 0;
            break;
          default:
            throw new IllegalArgumentException();
        }
      }
    }

    // Compute all minimum distances (Bellman-Ford)
    for (int i = 0; i < WIDTH * HEIGHT; i++) {
      for (int j = 0; j < HEIGHT; j++) {
        for (int k = 0; k < WIDTH; k++) {
          if (map[j + 1][k + 1] == 'T') {
            int d = distance[j + 1][k + 1];
            d = Math.min(distance[j + 1][k + 0] + 1, d);
            d = Math.min(distance[j + 1][k + 2] + 1, d);
            d = Math.min(distance[j + 0][k + 1] + 1, d);
            d = Math.min(distance[j + 2][k + 1] + 1, d);
            distance[j + 1][k + 1] = d;
          }
        }
      }
    }

    // Find maximum distance
    int max = 0;
    for (int i = 0; i < HEIGHT; i++) {
      for (int j = 0; j < WIDTH; j++) {
        if (map[i + 1][j + 1] == 'T') max = Math.max(distance[i + 1][j + 1], max);
      }
    }
    if (max != 999) io.println(max);
    else io.println(-1);
  }
 protected void runOnce() {
   int[] digits = DwiteAlgorithm.toDigits(io.readLine());
   if (isLuhnValid(digits)) io.println("VALID");
   else {
     // Try all values for the last digit
     for (int i = 0; i < 10; i++) {
       digits[digits.length - 1] = i;
       if (isLuhnValid(digits)) { // Guaranteed to execute before the loop ends
         io.printf("INVALID %d%n", digits[digits.length - 1]);
         break;
       }
     }
   }
 }