#include <bits/stdc++.h>
using namespace std;
const int mx = 5e5 + 10;
const long long mod = 9999999967;
mt19937 mtrand(time(0));
int n, m;
int a[mx], b[mx];
int dd[mx], cnt;
void solve() {
  for (int i = 1; i <= m + 1; ++i) {
    if (a[b[i - 1]] >= a[b[i]] ||
        b[i] - b[i - 1] - 1 + a[b[i - 1]] >= a[b[i]]) {
      puts("-1");
      return;
    }
  }
  int res = 0;
  for (int i = 1; i <= m + 1; ++i) {
    dd[cnt = 1] = a[b[i - 1]] - b[i - 1];
    for (int j = b[i - 1] + 1; j < b[i]; ++j) {
      if (a[j] - j >= a[b[i - 1]] - b[i - 1] && a[j] - j <= a[b[i]] - b[i]) {
        int p = upper_bound(dd + 1, dd + cnt + 1, a[j] - j) - dd;
        if (p > cnt)
          dd[++cnt] = a[j] - j;
        else
          dd[p] = a[j] - j;
      }
    }
    int p = upper_bound(dd + 1, dd + cnt + 1, a[b[i]] - b[i]) - dd;
    res += (b[i] - b[i - 1] + 1) - p;
  }
  printf("%d\n", res);
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; ++i) {
    scanf("%d", &a[i]);
  }
  a[0] = -0x3f3f3f3f, a[n + 1] = 0x3f3f3f3f;
  b[0] = 0, b[m + 1] = n + 1;
  for (int i = 1; i <= m; ++i) {
    scanf("%d", &b[i]);
  }
  solve();
}
