#include<bits/stdc++.h>
#define int long long
using namespace std;
const int M=1e6+7;
int n,m,a[M],v[M],b[M],ll[M],rr[M],cnt[M];
bool flag[M];
bool check(int x){
for(int i=1;i<=n;i++)cnt[i]=0LL;
for(int i=1;i<=n;i++)ll[i]=0LL;
for(int i=1;i<=n;i++){
cnt[i]=cnt[i-1]-(int)(flag[max(0LL,i-x)]);
ll[i]=ll[i-1]-cnt[i]+(int)(flag[i])*x;
cnt[i]+=(int)(flag[i]);
}
for(int i=1;i<=n;i++)cnt[i]=0LL;
for(int i=1;i<=n;i++)rr[i]=0LL;
for(int i=n;i>=1;i--){
cnt[i]=cnt[i+1]-(int)(flag[min(n+1,i+x)]);
rr[i]=rr[i+1]-cnt[i]+(int)(flag[i])*x;
cnt[i]+=(int)(flag[i]);
}
for(int i=1;i<=n;i++){
v[i]=ll[i]+rr[i]-(int)(flag[i])*x;
if(v[i]<a[i])return false;
}
return true;
}
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++)scanf("%lld",&a[i]);
for(int i=1;i<=m;i++){
scanf("%lld",&b[i]);
flag[b[i]]=true;
}
int l=0,r=1e12;
while(l<=r){
for(int i=1;i<=n;i++)v[i]=0LL;
int mid=(l+r)>>1;
if(check(mid))r=mid-1;
else l=mid+1;
}
cout<<l<<endl;
return 0;
}