#include <bits/stdc++.h>
template <class T>
inline void read(T &x) {
  x = 0;
  int f = 0;
  char ch = getchar();
  while (!isdigit(ch)) {
    f |= ch == '-';
    ch = getchar();
  }
  while (isdigit(ch)) {
    x = (x << 1) + (x << 3) + (ch ^ 48);
    ch = getchar();
  }
  x = f ? -x : x;
  return;
}
int a[500010], b[500010], f[500010];
int n, k, len, lst;
bool can[500010];
bool flag = true;
int main() {
  read(n), read(k);
  for (int i = 1; i <= n; ++i) read(a[i]);
  for (int i = 1; i <= k; ++i) read(b[i]), can[b[i]] = true;
  for (int i = 2; i <= k; ++i) {
    if (a[b[i]] < a[b[i - 1]] || a[b[i]] - a[b[i - 1]] < b[i] - b[i - 1]) {
      flag = false;
      break;
    }
  }
  if (!flag) {
    puts("-1");
    return 0;
  }
  for (int i = 1; i <= n; ++i) a[i] -= i;
  for (int i = 1; i <= n; ++i) {
    if (a[i] >= f[len]) {
      f[++len] = a[i];
      if (can[i]) lst = len;
    } else {
      int p = std::upper_bound(f + 1, f + len + 1, a[i]) - f;
      if (p <= lst) continue;
      f[p] = a[i];
      if (can[i]) lst = p, len = p;
    }
  }
  printf("%d\n", n - len);
  return 0;
}
