#include<algorithm>
#include<iostream>
#include<cstdio>
#define N 600
using namespace std;
typedef struct{
int dl=-1,t=-1,fl=0,val=0;
} Game;
//t代表做的时刻 dl代表deadline
//定义结构体Game fl=0不做
//t=-1也代表不做
bool st(Game p,Game q){return p.val>=q.val;}
//比较函数
//按从大到小
int select(int *p,int n){
int i;
for(i=n;i>=0&&p[i]==1;i--);
return i;
}
//返回选择时段
void dispG(Game *G,int n){
int i=0;
for (i=0;i<n;i++)
cout<<G[i].dl+1<<" "<<G[i].t+1<<" "<<G[i].val<<endl;
}
//打印Game
int main(){
Game G[N];
int m,n,temp,temp2;
while(cin>>m>>n)
{
int i,Time[N]={0};//某时刻做or不做
int sum=0;
for (i=0;i<n;i++)
{cin>>temp;G[i].dl=temp-1;}
for (i=0;i<n;i++)
cin>>G[i].val;
sort(G,G+n,st);
for (i=0;i<n;i++)
{
temp2=select(Time,G[i].dl);
G[i].t=temp2;
Time[temp2]=1;
}
/*
dispG(G,n);
for (i=0;i<n;i++)
cout<<Time[i]<<endl;
*/
for(i=0;i<n;i++)
{
if(G[i].t==-1)
sum+=G[i].val;
}
cout<<m-sum<<endl;
}
return 0;
}