#include<bits/stdc++.h>
using namespace std;
int m,q,n,cnt,sti[8000010][23];
string s;
struct node{
int l,r,z;
bool operator<(const node t)const{
return l<t.l;
}
}x[1000010];
void dfs(int l,int r,int ll,int rr){
if(ll>rr) return ;
int i=l;
for(i=l;i<=r;i++) if(s[i]=='<'||s[i]=='>') break;
int u=1;
if(s[i]!='>'&&s[i]!='<'){
int z=0;
for(int j=l;j<=r;j++) z=z*10+s[j]-'0';
x[++cnt]=(node){ll,rr,z};
return ;
}
bool f=0;
if(s[i]=='>') f=1;
int z=0;
i++;
for(;s[i]>='0'&&s[i]<='9';i++) z=z*10+s[i]-'0';
int q=++i;
int lll=i,rrr=r,ans=r;
while(lll<=rrr){
int mid=(lll+rrr)/2,cd=mid-i;
int lg=log2(cd);
int minn=min(sti[i][lg],sti[mid-(1<<lg)+1][lg]);
if(minn<=sti[i][0]-1) rrr=mid-1,ans=mid;
else lll=mid+1;
}
i=ans;
if(f){
dfs(q,i-1,max(ll,z+1),rr);
dfs(i+1,r,ll,min(rr,z));
return ;
}
dfs(q,i-1,ll,min(rr,z-1));
dfs(i+1,r,max(ll,z),rr);
}
signed main(){
scanf("%d%d",&m,&q);
cin>>s;
n=s.size();
s=" "+s;
for(int i=1;i<=n;i++){
sti[i][0]=sti[i-1][0];
if(s[i]==':') sti[i][0]--;
if(s[i]=='?') sti[i][0]++;
}
for(int i=1;i<=22;i++) for(int j=1;j<=n;j++) sti[j][i]=min(sti[j][i-1],sti[j+(1<<i-1)][i-1]);
dfs(1,n,0,1000000000);
sort(x+1,x+1+cnt);
for(int i=1;i<=q;i++){
int z;
scanf("%d",&z);
int l=1,r=cnt,ans=cnt;
while(l<=r){
int mid=(l+r)/2;
if(z>=x[mid].l) l=mid+1,ans=mid;
else r=mid-1;
}
printf("%d\n",x[ans].z);
}
return 0;
}