#include #define ff first #define ss second #define pb push_back #define mp make_pair #define ll long long #define all(a) a.begin(),a.end() using namespace std; const int N=5e4+3; int t,n,m,sz; vector< pair > b[N]; char a1[N]; pair c[N]; int dp[N],kl0,kl1; int ans[N]; int d0[N*4]; int ob0[N*4]; int d1[N*4]; int ob1[N*4]; void push1(int v,int l,int r) { if(ob1[v]!=0) { d1[v]+=ob1[v]; if(l!=r) { ob1[v+v]+=ob1[v]; ob1[v+v+1]+=ob1[v]; } ob1[v]=0; } } void update1(int v,int l,int r,int l_v,int r_v,int x) { push1(v,l,r); if(l>r_v||r=l_v&&r<=r_v) { ob1[v]+=x; push1(v,l,r); return; } int mid=(l+r)/2; update1(v+v,l,mid,l_v,r_v,x); update1(v+v+1,mid+1,r,l_v,r_v,x); d1[v]=max(d1[v+v],d1[v+v+1]); } int get_max1(int v,int l,int r,int l_v,int r_v) { push1(v,l,r); if(l>r_v||r=l_v&&r<=r_v)return d1[v]; int mid=(l+r)/2; return max(get_max1(v+v,l,mid,l_v,r_v),get_max1(v+v+1,mid+1,r,l_v,r_v)); } void push0(int v,int l,int r) { if(ob0[v]!=0) { d0[v]+=ob0[v]; if(l!=r) { ob0[v+v]+=ob0[v]; ob0[v+v+1]+=ob0[v]; } ob0[v]=0; } } void update0(int v,int l,int r,int l_v,int r_v,int x) { push0(v,l,r); if(l>r_v||r=l_v&&r<=r_v) { ob0[v]+=x; push0(v,l,r); return; } int mid=(l+r)/2; update0(v+v,l,mid,l_v,r_v,x); update0(v+v+1,mid+1,r,l_v,r_v,x); d0[v]=max(d0[v+v],d0[v+v+1]); } int get_max0(int v,int l,int r,int l_v,int r_v) { push0(v,l,r); if(l>r_v||r=l_v&&r<=r_v)return d0[v]; int mid=(l+r)/2; return max(get_max0(v+v,l,mid,l_v,r_v),get_max0(v+v+1,mid+1,r,l_v,r_v)); } int main() { //ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); cin>>t; while(t--) { kl0=0; kl1=0; cin>>m>>n; for(int i=1;i<=n;++i) { cin>>a1[i]; } for(int i=1;i<=n;++i) { cin>>c[i].ff; } for(int i=1;i<=m;++i) { b[i].clear(); } for(int i=1;i<=n;++i) { cin>>c[i].ss; if(c[i].ff=1;i--) { ans[i]=min(ans[i],ans[i+1]); } for(int i=1;i<=n;++i) { if(ans[i]==1000000000)cout<<-1; else cout<