#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned ll
inline ll read(){
ll x=0;
short f=1;
char c=getchar();
while(c>57||c<48){
if(c==45) f=-1;
c=getchar();
}
while(c<58&&c>47){
x=(x<<1)+(x<<3)+(c^48);
c=getchar();
}
return x*f;
}
inline void write(ll x){
if(x<0ll) putchar(45),x=~x+1;
if(x>9ll) write(x/10);
putchar(x%10|48);
}
int n=read(),k=read();
int a[500005];
int dot[500005];
int dp[5000005];
int len;
int LIS(int l,int r){
len=1;
dp[len]=a[l];
for(int i=l+1;i<r;i++){
if(a[i]>=dp[len]){
dp[++len]=a[i];
}
else{
int k=upper_bound(dp+1,dp+len+1,a[i])-dp;
dp[k]=a[i];
}
}
return upper_bound(dp+1,dp+len+1,a[r])-dp;
}
int ans=0;
int main(){
for(int i=1;i<=n;i++){
a[i]=read()-i;
}
for(int i=1;i<=k;i++){
dot[i]=read();
}
dot[++k]=0;
dot[++k]=n+1;
a[0]=-(1<<30);
a[n+1]=1<<30;
sort(dot+1,dot+k+1);
for(int i=1;i<k;i++){
if(dot[i]==dot[i+1]) continue;
if(a[dot[i+1]]<a[dot[i]]) return write(-1),0;
ans+=(dot[i+1]-dot[i]+1)-LIS(dot[i],dot[i+1]);
}
write(ans);
}
recording