#include <bits/stdc++.h>
using namespace std;
const long long int sz = 1e5 + 100;
const long long int Max = 1e15 + 100;
long long int LIS(vector<long long int> Inp) {
  vector<long long int> test;
  for (auto xx : Inp) {
    if (xx < 0ll) continue;
    long long int siz = test.size();
    long long int pos =
        upper_bound(test.begin(), test.end(), xx) - test.begin();
    if (pos == siz)
      test.push_back(xx);
    else
      test[pos] = xx;
  }
  return test.size();
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  long long int a, b, c, i, j, k, q, p, x, y, ct, ct1, m, l, r, x1, y1, h, sum1,
      in, z, mid, n, mx;
  char ch;
  double d;
  string str1, str2, str;
  bool bl, bl1;
  int t, cs = 1;
  cin >> n >> m;
  long long int ara[n + 3];
  ara[0] = -Max;
  for (long long int i = 1; i <= n; i++) cin >> ara[i];
  ara[n + 1] = Max;
  bl = true;
  m += 2;
  long long int bag[m];
  bag[0] = 0;
  for (long long int i = 1; i < m - 1; i++) cin >> bag[i];
  bag[m - 1] = n + 1;
  for (long long int i = 1; i < m; i++) {
    if (bag[i] == bag[i - 1]) continue;
    long long int p = ara[bag[i]] - ara[bag[i - 1]] + 1;
    if (p < (bag[i] - bag[i - 1] + 1) || (ara[bag[i - 1]] >= ara[bag[i]])) {
      bl = false;
      break;
    }
  }
  if (bl == false) {
    cout << "-1\n";
    return 0;
  }
  long long int ans = 0;
  for (long long int i = 1; i < m; i++) {
    if (bag[i] == bag[i - 1] || (bag[i] == bag[i - 1] + 1)) continue;
    vector<long long int> test;
    long long int p = ((ara[bag[i]] - ara[bag[i - 1]]) - (bag[i] - bag[i - 1]));
    for (long long int j = bag[i - 1] + 1; j < bag[i]; j++) {
      long long int x;
      if (ara[j] <= ara[bag[i - 1]])
        x = -1;
      else
        x = ((ara[j] - ara[bag[i - 1]]) - (j - bag[i - 1]));
      if (x > p) x = -1;
      test.push_back(x);
    }
    long long int el = bag[i] - bag[i - 1] - 1;
    ans += (el - LIS(test));
  }
  cout << ans << '\n';
}
