记录
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int m,q;
struct node{
char lo;
ll num,tid,fid;
}a[500005];
int getpos(string s){
int cnt1=0,cnt2=0;
for(int i=0;i<s.size();i++){
if(s[i]=='?'){
cnt1++;
}
if(s[i]==':'){
cnt2++;
}
if(cnt1==cnt2&&cnt1!=0) return i;
}
}
ll turnnum(string s){
ll ans=0;
for(int i=0;i<s.size();i++){
ans=ans*10+s[i]-'0';
}
return ans;
}
ll solve(ll x,int p){
if(a[p].lo=='n'||a[p].tid==0||a[p].fid==0){
return a[p].num;
}
if(a[p].lo=='b'){
if(x>a[p].num){
return solve(x,a[p].tid);
}
else{
return solve(x,a[p].fid);
}
}
if(a[p].lo=='s'){
if(x>a[p].num){
return solve(x,a[p].fid);
}
else{
return solve(x,a[p].tid);
}
}
}
int cnt=0;
void build(string s){
cnt++;
if(s[0]=='x'){
if(s[1]=='>'){
a[cnt].lo='b';
}
else if(s[1]=='<'){
a[cnt].lo='s';
}
int pos=s.find('?'),pos2=getpos(s);
int nowpos=cnt;
a[cnt].num=turnnum(s.substr(2,pos-2));
a[cnt].tid=cnt+1;
build(s.substr(pos+1,pos2-pos-1));
a[nowpos].fid=cnt+1;
build(s.substr(pos2+1,s.size()-pos2-1));
return;
}
else{
a[cnt].lo='n';
a[cnt].num=turnnum(s);
return;
}
}
int main(){
string s;
cin>>m>>q;
cin>>s;
build(s);
while(q--){
ll x;
cin>>x;
cout<<solve(x,1)<<"\n";
}
}