RT
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 10;
int a[maxn], b[maxn],n , m,ans = -1;
bool flag[maxn];
bool check(int x){
int num = 0;
for(int i = 1; i <= m; ++i)
flag[i] = false;
for(int i = x; i >= 1; --i){
if(a[i] != 0 && !flag[a[i]]){
flag[a[i]] = true;
num += b[a[i]];
}
else
num --;
}
if(num > 0)
return false;
for(int i = 1; i <= m; ++i)
if(!flag[i])
return false;
return true;
}
int main(){
int n;
cin >> n >> m;
for(int i = 1; i <= n; ++i)
cin >> a[i];
for(int i = 1; i <= m; ++i)
cin >> b[i];
int l = 1, r = n;
while(l <= r){
int mid = (l + r) / 2;
if(check(mid)){
ans = mid;
r = mid - 1;
}
else
l = mid + 1;
}
cout << ans;
return 0;
}