#include<bits/stdc++.h>
#define int long long
using namespace std;
namespace IO{
char ibuf[1<<14],*iS,*iT;
#if ONLINE_JUDGE
#define gh() (iS==iT?iT=(iS=ibuf)+fread(ibuf,1,1<<14,stdin),(iS==iT?EOF:*iS++):*iS++)
#else
#define gh() getchar()
#endif
inline int read(){
char ch=gh();
int x=0,f=0;
while(!isdigit(ch)) f|=(ch=='-'),ch=gh();
while(isdigit(ch)) x=(x<<3)+(x<<1)+(ch^48),ch=gh();
return f?-x:x;
}
inline void Write(int x){
if(x>=10) Write(x/10);
putchar(x%10+48);
}
inline void write(int x,char ch=0){
if(x<0) putchar('-'),x=-x;
Write(x);
if(ch!=0) putchar(ch);
}
}
using IO::read;
using IO::write;
long long n,m,ans,a[1000005],b[1000005],sum[1000005],maxa;
bool check(long long x){
for(int i=1;i<=n;i++){
long long l=upper_bound(b+1,b+m+1,i-x)-b,mid=lower_bound(b+1,b+m+1,i)-b,r=lower_bound(b+1,b+m+1,i+x)-b-1;
long long now=(r-mid+1)*x-(sum[r]-sum[mid-1]-i*(r-mid+1))+(mid-l)*x-((mid-l)*i-(sum[mid-1]+sum[l-1]));
if(now<a[i]) return 0;
}
return 1;
}
signed main(){
n=read(),m=read();
for(int i=1;i<=n;i++) a[i]=read(),maxa=max(maxa,a[i]);
for(int i=1;i<=m;i++) b[i]=read();
sort(b+1,b+m+1);
for(int i=1;i<=n;i++) sum[i]=sum[i-1]+b[i];
long long l=0,r=maxa+n;
while(l<=r){
long long mid=(l+r)>>1;
if(check(mid)) ans=mid,r=mid-1;
else l=mid+1;
}
write(ans);
}
WA on #5