#include<stdio.h>
#include<stdbool.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<limits.h>
#include<float.h>
#include<ctype.h>
#define LL long long
int m,q;
int ANS[100000+2];
typedef struct{
char cmptype;
int t,left,right;
}Node;
int ns;
Node node[100000+2];
int build(char head)
{
char ch=head;
int d=0,i=++ns;
if(ch=='x'){
node[i].cmptype=getchar();
ch=getchar();
while(isdigit(ch))d*=10,d+=ch-'0',ch=getchar();
node[i].t=d;
node[i].left=build(getchar());
node[i].right=build(getchar());
}else{
while(isdigit(ch))d*=10,d+=ch-'0',ch=getchar();
node[i].t=d;
}
return i;
}
int traverse(int x,int i)
{
switch(node[i].cmptype){
case 0:{return node[i].t;}
case '<':{
if(x<node[i].t)return traverse(x,node[i].left);
else return traverse(x,node[i].right);
}
case '>':{
if(x>node[i].t)return traverse(x,node[i].left);
else return traverse(x,node[i].right);
}
}
}
int ans(int x)
{
if(!ANS[x])ANS[x]=traverse(x,1);
return ANS[x];
}
int main()
{
scanf("%d%d\n",&m,&q);
build(getchar());
int x;
while(q--){
scanf("%d",&x);
printf("%d\n",x>m?ans(m+1):ans(x));
}
return 0;
}