#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
int r[N];
int e[N];
int need[N];
int n, m;
bool can(int x) {
memset(r, -1, sizeof r);
for(int i = 1; i <= x; i++) {
if(e[i] == 0) continue;
r[e[i]] = i;
}
for(int i = 1; i <= m; i++) {
if(r[i] == -1) return false;
}
int days = 0;
for(int i = 1; i <= x; i++) {
if(e[i] == 0) days++;
else if(r[e[i]] == i) {
if(days >= need[e[i]]) {
days -= need[e[i]];
}
else {
return false;
}
}
else days++;
}
return true;
}
int main() {
cin >> n >> m;
for(int i = 1; i <= n; i++) {
cin >> e[i];
}
for(int i = 1; i <= m; i++) {
cin >> need[i];
}
int l = 1, r = n;
int best = -1;
while(l <= r) {
int mid = (l + r) / 2;
if(can(mid)) {
best = mid, r = mid - 1;
}
else {
l = mid + 1;
}
}
cout << best;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgaW50IE4gPSAxZTUgKyA1OwoKaW50IHJbTl07CmludCBlW05dOwppbnQgbmVlZFtOXTsKaW50IG4sIG07Cgpib29sIGNhbihpbnQgeCkgewogIG1lbXNldChyLCAtMSwgc2l6ZW9mIHIpOwogIGZvcihpbnQgaSA9IDE7IGkgPD0geDsgaSsrKSB7CiAgICBpZihlW2ldID09IDApIGNvbnRpbnVlOwogICAgcltlW2ldXSA9IGk7CiAgfQogIGZvcihpbnQgaSA9IDE7IGkgPD0gbTsgaSsrKSB7CiAgICBpZihyW2ldID09IC0xKSByZXR1cm4gZmFsc2U7CiAgfQogIGludCBkYXlzID0gMDsKICBmb3IoaW50IGkgPSAxOyBpIDw9IHg7IGkrKykgewogICAgaWYoZVtpXSA9PSAwKSBkYXlzKys7CiAgICBlbHNlIGlmKHJbZVtpXV0gPT0gaSkgewogICAgICBpZihkYXlzID49IG5lZWRbZVtpXV0pIHsKICAgICAgICBkYXlzIC09IG5lZWRbZVtpXV07CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICBlbHNlIGRheXMrKzsKICB9CiAgcmV0dXJuIHRydWU7Cn0KCmludCBtYWluKCkgewogIGNpbiA+PiBuID4+IG07CiAgZm9yKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKICAgIGNpbiA+PiBlW2ldOwogIH0KICBmb3IoaW50IGkgPSAxOyBpIDw9IG07IGkrKykgewogICAgY2luID4+IG5lZWRbaV07CiAgfQogIGludCBsID0gMSwgciA9IG47CiAgaW50IGJlc3QgPSAtMTsKICB3aGlsZShsIDw9IHIpIHsKICAgIGludCBtaWQgPSAobCArIHIpIC8gMjsKICAgIGlmKGNhbihtaWQpKSB7CiAgICAgIGJlc3QgPSBtaWQsIHIgPSBtaWQgLSAxOwogICAgfQogICAgZWxzZSB7CiAgICAgIGwgPSBtaWQgKyAxOwogICAgfQogIH0KICBjb3V0IDw8IGJlc3Q7Cn0=