#include <bits/stdc++.h>
using namespace std;
bool isprime[3100000];
int prime[300000];
int num;
void init() {
  int i, j;
  num = 0;
  memset(isprime, 0, sizeof(isprime));
  for (i = 2; i < 3000000; ++i) {
    if (!isprime[i]) prime[num++] = i;
    for (j = 0; j < num && i * prime[j] < 3000000; ++j) {
      isprime[i * prime[j]] = 1;
      if (i % prime[j] == 0) break;
    }
  }
  return;
}
int a[110000];
bool check(int v, int* id) {
  if (v >= 3100000) return 0;
  if (isprime[v] == 1) return 1;
  if (v == prime[*id]) {
    (*id)++;
    return 1;
  }
  return 0;
}
int main() {
  int n, x;
  init();
  while (scanf("%d%d", &n, &x) == 2) {
    int i, j;
    for (i = 0; i < n; ++i) scanf("%d", a + i);
    sort(a, a + n);
    for (i = 1, j = 0; i < n; ++i) {
      if (a[i] != a[j]) a[++j] = a[i];
    }
    n = j + 1;
    if (x == 2)
      puts("0");
    else if (a[0] == 1)
      puts("1");
    else if (x >= 3100000)
      puts("-1");
    else {
      int tmp = 0;
      bool flag = 0;
      for (i = 0; i < n; ++i)
        if (!check(a[i], &tmp)) {
          break;
        } else {
          if (isprime[a[i]] == 0 && prime[tmp] >= x) {
            flag = 1;
            break;
          }
        }
      if (flag)
        printf("%d\n", tmp);
      else
        puts("-1");
    }
  }
  return 0;
}
