#include <bits/stdc++.h>
namespace Varius {
const int N = 5e5 + 5;
int n, k, a[N], b[N], ans = 0, tmp[N];
void Solve(int l, int r) {
  int cnt = 0;
  tmp[++cnt] = a[l];
  for (int i = l + 1; i <= r; i++) {
    if (a[i] >= tmp[cnt])
      tmp[++cnt] = a[i];
    else {
      int p = std ::upper_bound(tmp + 1, tmp + cnt + 1, a[i]) - tmp;
      if (p != 1) tmp[p] = a[i];
    }
  }
  int p = std ::upper_bound(tmp + 1, tmp + cnt + 1, a[r]) - tmp - 1;
  ans += ((r - l + 1) - p);
}
void main() {
  scanf("%d%d", &n, &k);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]), a[i] = a[i] - i;
  a[0] = -0x3f3f3f3f, a[n + 1] = 0x3f3f3f3f;
  for (int i = 1; i <= k; i++) scanf("%d", &b[i]);
  b[0] = 0, b[k + 1] = n + 1;
  for (int i = 1; i <= k; i++) {
    if (a[b[i]] > a[b[i + 1]]) {
      puts("-1");
      return;
    }
  }
  for (int i = 0; i <= k; i++) {
    int vl = b[i], vr = b[i + 1];
    Solve(vl, vr);
  }
  printf("%d\n", ans);
}
}  // namespace Varius
int main() { Varius ::main(); }
