#include<cstdio>
#include<cstdlib>
#define MAXN 505
using namespace std;
int D[MAXN];
int sz;
void push(int);
void upcheck(int);
void downcheck(int);
void sp(int&,int&);
void pop(void);
inline int read(void){
register int ans=0;
register char us=getchar();
while(us<'0'||us>'9')us=getchar();
while(us>='0'&&us<='9'){
ans=(ans<<1)+(ans<<3)+(us^48);
us=getchar();
}
return ans;
}
void qsort1(int,int);
int deadline[MAXN],value[MAXN];
int main(){
int m,n;
m=read();n=read();
for(register int i=0;i<n;++i)deadline[i]=read();
for(register int i=0;i<n;++i)value[i]=read();
qsort1(0,n-1);
int mx=0;
int nw=0;
for(register int i=n;i>=0;--i){
while(nw<n&&deadline[nw]>i){
push(nw);
++nw;
}
mx+=value[D[1]];
pop();
}
for(register int i=0;i<n;++i){
mx-=value[i];
}
printf("%d",m+mx);
return 0;
}
void qsort1(int L,int R){
if(L>=R)return;
int l=L,r=R;
int mid=deadline[L+R>>1];
while(l<r){
while(l<=r&&deadline[l]>=mid)++l;
while(l<=r&&deadline[r]<=mid)--r;
if(l<r){
sp(deadline[l],deadline[r]);
sp(value[l],value[r]);
++l;
--r;
}
}
qsort1(L,l);
qsort1(r+1,R);
return;
}
void push(int x){
++sz;
D[sz]=x;
upcheck(sz);
return;
}
void pop(void){
sp(D[1],D[sz]);
--sz;
downcheck(1);
return;
}
void sp(int&a,int&b){
a^=b;b^=a;a^=b;
}
void upcheck(int x){
if(x==1)return;
if(value[D[x]]<value[D[x>>1]]){
sp(D[x],D[x>>1]);
upcheck(x>>1);
}
return;
}
void downcheck(int x){
if(x<<1>sz)return;
if(x<<1==sz){
if(value[D[x]]<=value[D[x<<1]])return;
sp(D[x],D[x<<1]);
return;
}
else{
if(value[D[x]]<=value[D[x<<1]]&&value[D[x]]<=value[D[(x<<1)+1]])return;
if(value[D[x<<1]]<value[D[(x<<1)+1]]){
sp(D[x],D[x<<1]);
downcheck(x<<1);
}
else{
sp(D[x],D[(x<<1)+1]);
downcheck((x<<1)+1);
}
}
return;
}