QwQ
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll m,n,q;
string s;
ll nxt[1000010];//记录每一个?后对应的:
ll sum;
ll xp;
ll ans;
stack<ll>p;//用于存储:
void cal(ll l,ll r){//递归寻找答案
if(l>n||r>n)return;//特判
if(l>r)return;//特判
if(l==r){//没必要的特判
cout<<s[l]-'0'<<endl;
return;
}
if(s[l]=='x'){
ll cnt=0,id;
for(ll i=l+2;i<=r;i++){
if(s[i]=='?'){
id=i;//记录?位置
break;
}
cnt=cnt*10+s[i]-'0';//记录x>a的a
}
if(s[l+1]=='>'){//>的情况
if(xp>cnt){
cal(id+1,nxt[id]-1);//符合去左边
}
else{
cal(nxt[id]+1,r);//不符合去右边
}
}
if(s[l+1]=='<'){//<的情况,同上
if(xp<cnt){
cal(id+1,nxt[id]-1);
}
else{
cal(nxt[id]+1,r);
}
}
}
else{//这就是答案了
ll cnt=0;
for(ll i=l;i<=r;i++){
cnt=cnt*10+s[i]-'0';
}
cout<<cnt<<endl;
return;
}
}
signed main(){
// freopen("expr3.in","r",stdin);
cin>>m>>q;
cin>>s;
n=s.size();
s=" "+s;
for(ll i=n;i>=1;i--){
if(s[i]==':')p.push(i);//记录:
if(s[i]=='?'){//遇到?时,取栈顶并记录
nxt[i]=p.top();
p.pop();
}
}
while(q--){
cin>>xp;
cal(1,n);//计算
}
return 0;
}