#include<stdio.h>
int n,m,k,acu,p,q;
const int doi[]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288,1048576};
int a[20][250010],lc;
char c[1750010];
void citire()
{
fgets(c,1750010,stdin);
int i,aux=0,n1=0,aux1,aux2;
for(i=0; c[i]!='\0'; i++)
{
if(c[i]>='0')
{
aux1=aux<<3;
aux2=aux<<1;
aux=aux1+aux2+c[i]-'0';
}
else
{
a[0][++n1]=aux;
aux=0;
}
}
}
void citeste()
{
fgets(c,100,stdin);
p=q=0;
int i,j,q1,q2;
for(i=0; c[i]>='0'; i++)
{
q1=q<<3;
q2=q<<1;
q=q1+q2;
q+=c[i]-'0';
}
for(j=i+1; c[j]>='0'; j++)
p=p*10+c[j]-'0';
}
void dfs()
{
if(q==0)
return;
if(k==doi[lc])
{
a[lc][acu]=q;
lc++;
}
q=a[0][q];
k++;
dfs();
}
int caut(int r)
{
int p1=0,q1=20,m;
while(p1<q1)
{
m=(p1+q1)>>1;
if(doi[m]>=r)
q1=m;
else
p1=m+1;
}
if(doi[p1]>r)
p1--;
return p1;
}
/*void dfs1()
{
if((p==k)||(q==0))
{
printf("%d\n",q);
return;
}
q=a[0][q];
k++;
dfs1();
}*/
int main()
{
freopen("stramosi.in","r",stdin);
freopen("stramosi.out","w",stdout);
scanf("%d%d\n",&n,&m);
int i,r,p1;
citire();
for(i=1; i<=n; i++)
{
q=a[0][i];
acu=i;
lc=1;
k=1;
dfs();
}
/*int j;
for(i=0; i<=10; i++)
{
for(j=1; j<=n; j++)
printf("%2d ",a[i][j]);
printf("\n");
}*/
for(i=0; i<m; i++)
{
citeste();
p1=p;
k=0;
while((k!=p)&&(q))
{
r=caut(p1);
k+=doi[r];
q=a[r][q];
p1=p-k;
}
printf("%d\n",q);
//dfs1();
}
return 0;
}