#include<bits/stdc++.h>
using namespace std;
long long a[1000001],n,m,b[1000001],maxx=-1,minx=1000000001,c[1000001],r=0;
inline int read(){
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*f;
}
inline void write(int x)
{
if(!x) putchar('0');
char F[200];
int tmp=x>0?x:-x ;
if(x<0)putchar('-') ;
int cnt=0 ;
while(tmp>0)
{
F[cnt++]=tmp%10+'0';
tmp/=10;
}
while(cnt>0)putchar(F[--cnt]) ;
}
int check(int x)
{
memset(c,0,sizeof(c));
for(long long i=1;i<=m;i++)
{
long long y=b[i];
c[y]+=x;
for(long long j=1;j<=n;j++)
{
c[j]+=max(r,x-abs(j-y));
}
}
for(long long i=1;i<=n;i++)
{
if(c[i]<a[i])
return 0;
}
return 1;
}
int main(){
n=read();
m=read();
for(int i=1;i<=n;i++)
{
a[i]=read();
minx=min(minx,a[i]);
maxx=max(maxx,a[i]);
}
for(int i=1;i<=m;i++)
{
b[i]=read();
}
int l=minx,r=maxx;
/*for(int i=minx;i<=maxx;i++)
{
if(check(i)==1){
write(i);
return 0;
}
}*/
int mid;
while(l<r-1)
{
mid=l+(r-l)/2;
if(check(mid)==1)
{
for(int i=1;i<=n;i++)
{
if(c[i]>a[i])
{
r=mid;
}
}
}
if(check(mid)==0)
{
l=mid;
}
}
write(r);
return 0;
}