#include<bits/stdc++.h>
using namespace std;
struct Node{
long long int w,ma;
}nod[8000001];
void read(long long int &x){
x=0;
int f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-'){
f=-f;
}
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x*=10;
x+=ch-'0';
ch=getchar();
}
x*=f;
}
int las[1000001],now[1000001];
long long int a[1000001],w[1000001];
void push_up(int p){
nod[p].w=nod[p].w+nod[p*2+1].w;
nod[p].ma=max(nod[p*2].ma+nod[p*2+1].ma,max(nod[p*2].ma,nod[p*2+1].ma));
}
void abb(int l,int r,int p,int cnt,int val){
int mid=l+r>>1;
if(l==r){
nod[p].w=val;
nod[p].ma=val;
return;
}
if(cnt>mid){
abb(mid+1,r,p*2+1,cnt,val);
push_up(p);
}
else{
abb(l,mid,p*2,cnt,val);
push_up(p);
}
}
int main(){
long long int n,m;
read(n);
read(m);
for(int i=1;i<=n;i++){
read(a[i]);
}
for(int i=1;i<=m;i++){
read(w[i]);
}
long long int ma=0;
for(int i=1;i<=n;i++){
abb(1,n,1,las[a[i]],0);
las[a[i]]=now[a[i]];
now[a[i]]=i;
abb(1,n,1,i,w[a[i]]);
abb(1,n,1,las[a[i]],-w[a[i]]);
ma=max(ma,nod[1].w);
}
printf("%lld",ma);
return 0;
}