#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
using namespace std;
int lb(vector<int> &a, int x){
    int l=0,r=int(a.size());
    while (l+1<r){
        int m=(l+r)/2;
        if (a[m]>x){
            r=m;
        } else {
            l=m;
        }
    }
    return a[l];
}
int main(){
    ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    int n,q,a1;
    cin >> n >> q;
    vector<int> sr;
    int r=0;
    unordered_map<int,int> o,o1;
    set<long long> f;
    vector<int> s(n);
    for (int i=1;i<n;i++){
        cin >> a1;
        if (a1==1){
            sr.push_back(i);
            o[i]=1;
        }
    }
    for (int i=0;i<n;i++){
        cin >> s[i];
    }
    for (int i:sr){
        f.insert(s[i]*n+i);
    }
    int t1=1;
    vector<int> t(n),it(n);
    for (int i=1;i<n;i++){
        long long y=*max_element(f.begin(),f.end());
        f.erase(max_element(f.begin(),f.end()));
        r=y%n;
        t[r]=t1;
        it[t1]=r;
        t1++;
        if (r+1<n && o[r+1]==0){
            f.insert(s[r+1]*n+r+1);
        }
    }
    int mx=0,mx1=0,in=-1,in1=-1;
    vector<int> ans(n);
    for (int i=1;i<n;i++){
        int p=lb(sr,it[i]);
        //cout << p << '\n';
        o1[p]++;
        if (o1[p]>mx){
            if (in1==p){
                mx1=mx;
                in1=in;
            }
            mx=o1[p];
            in=p;
        }
        if (o1[p]>mx1){
            if (in!=p){
                mx1=o1[p];
                in1=p;
            }
        }
        if (in==p){
            ans[it[i]]=i-mx1;
        } else {
            ans[it[i]]=i-mx;
        }
    }
    for (int i=0;i<q;i++){
        cin >> a1;
        cout << ans[a1-1] << ' ';
    }
}
