#include <bits/stdc++.h>
#pragma GCC optimize("O2")
#pragma GCC optimize("unroll-loops")
using namespace std;
const int MAX = 5e5 + 5;
const long long MAX2 = 11;
const long long MOD = 1100000007;
const long long MOD2 = 1000005329;
const long long INF = 2e18;
const int dr[] = {1, 0, -1, 0, 1, 1, -1, -1, 0};
const int dc[] = {0, 1, 0, -1, 1, -1, 1, -1, 0};
const double pi = acos(-1);
const double EPS = 1e-9;
const int block = 1000;
int n, m, x[MAX], y[MAX], ans, res;
bool st[MAX];
map<int, int> lis;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> m;
  for (long long i = 1; i <= n; ++i) cin >> x[i], x[i] -= i;
  for (long long i = 1; i <= m; ++i) {
    cin >> y[i], st[y[i]] = 1;
    if (i > 1 && x[y[i - 1]] > x[y[i]]) return cout << "-1\n", 0;
  }
  lis[-MOD] = 0;
  auto it = lis.begin();
  for (long long i = 1; i <= n; ++i) {
    it = lis.upper_bound(x[i]);
    if (it == lis.begin()) continue;
    --it;
    res = (*it).second - 1;
    if (st[i]) lis.clear();
    lis[x[i]] = res;
    it = lis.upper_bound(x[i]);
    while (it != lis.end() && res < (*it).second) {
      lis.erase(it);
      it = lis.upper_bound(x[i]);
    }
  }
  it = lis.end();
  --it;
  cout << n + (*it).second << '\n';
  return 0;
}
