#include <bits/stdc++.h>
using namespace std;
const int MAXN = 5e5 + 10, inf = 2e9;
void fast_io() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
}
int n, k, a[MAXN], b[MAXN], h[MAXN], dp[MAXN];
int query(int l, int r) {
  while (l < r && a[l + 1] == a[l] + 1) l++;
  while (r > l && a[r - 1] == a[r] - 1) r--;
  l++;
  r--;
  if (l > r) return 0;
  int m = (r - l + 1), id = 1;
  for (int i = l; i <= r; i++) h[id++] = a[i];
  int bor = 0;
  dp[0] = a[l - 1];
  for (int i = 1; i <= m; i++) {
    if (h[i] >= a[r + 1] - (m - i) || a[l - 1] + i - 1 >= h[i]) continue;
    h[i] -= i;
    int left = 0, right = bor;
    while (left <= right) {
      int mid = (left + right) / 2;
      if (dp[mid] <= h[i])
        left = mid + 1;
      else
        right = mid - 1;
    }
    if (left > bor) {
      dp[left] = h[i];
      bor++;
    }
    if (dp[left] > h[i]) dp[left] = h[i];
  }
  return (m - bor);
}
void solve() {
  cin >> n >> k;
  for (int i = 1; i <= n; i++) cin >> a[i];
  a[0] = -inf;
  a[n + 1] = inf;
  for (int i = 1; i <= k; i++) {
    int x;
    cin >> x;
    b[x] = 1;
  }
  int ans = 0, last = 0;
  for (int i = 1; i <= n; i++) {
    if (b[i] == 1) {
      if (a[i] <= a[last] + i - last - 1) {
        cout << "-1" << '\n';
        return;
      }
      ans = ans + query(last, i);
      last = i;
    }
  }
  ans = ans + query(last, n + 1);
  cout << ans << '\n';
}
int main() {
  int t = 1;
  while (t--) solve();
  return 0;
}
