#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ull = unsigned long long;
ll calc(vector<ll> &a, ll l, ll r) {
  vector<ll> b;
  for (ll i = l; i <= r; i++) b.push_back(a[i]);
  vector<ll> lis;
  for (ll i : b) {
    if (i >= a[l - 1] and i <= a[r + 1]) {
      auto it = upper_bound(lis.begin(), lis.end(), i);
      if (it == lis.end())
        lis.push_back(i);
      else
        *it = min(*it, i);
    }
  }
  return b.size() - lis.size();
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  ll n;
  cin >> n;
  vector<ll> in(n + 5);
  ll m;
  cin >> m;
  vector<ll> b;
  for (ll i = 1; i <= n; i++) {
    cin >> in[i];
    in[i] -= i;
  }
  in[0] = -100000000009;
  in[n + 1] = 100000000009;
  b.push_back(0);
  for (ll i = 1; i <= m; i++) {
    ll k;
    cin >> k;
    b.push_back(k);
  }
  b.push_back(n + 1);
  sort(b.begin(), b.end());
  for (ll i = 1; i < b.size(); i++) {
    ll l = b[i - 1], r = b[i];
    ll dif = in[r] - in[l];
    if (in[l] > in[r]) {
      cout << -1 << endl;
      return 0;
    }
  }
  ll ans = 0;
  for (ll i = 1; i < b.size(); i++) {
    ll l = b[i - 1] + 1;
    ll r = b[i] - 1;
    if (l <= r) {
      ans += calc(in, l, r);
    }
  }
  cout << ans << endl;
}
