#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct comanda{ int sus, ind; };
void dfs(int *start_stiva, int *stiva, int *nr_copii, int **copii, int *nr_comenzi, struct comanda **comenzi_dupa_nod, int *rez){
const int cur = *stiva;
for(int i = 0; i < nr_comenzi[cur]; ++i){
int *poz_in_stiva = stiva - comenzi_dupa_nod[cur][i].sus;
rez[comenzi_dupa_nod[cur][i].ind] = (poz_in_stiva < start_stiva) ? 0 : *poz_in_stiva; }
for(int i = 0; i < nr_copii[cur]; ++i){
*(stiva+1) = copii[cur][i];
dfs(start_stiva, stiva+1, nr_copii, copii, nr_comenzi, comenzi_dupa_nod, rez); } }
int main(){
FILE *f = fopen("stramosi.in", "r"), *g = fopen("stramosi.out", "w");
int n, m;
fscanf(f, "%d %d", &n, &m);
int *tata = malloc((n+1) * sizeof(int)),
*nr_copii = malloc((n+1) * sizeof(int)),
**copii = malloc((n+1) * sizeof(int*)),
*copil_cur = malloc((n+1) * sizeof(int)),
*nr_comenzi = malloc((n+1) * sizeof(int)),
*comanda_cur = malloc((n+1) * sizeof(int));
memset(nr_copii, 0, (n+1) * sizeof(int));
memset(copil_cur, 0, (n+1) * sizeof(int));
memset(nr_comenzi, 0, (n+1) * sizeof(int));
memset(comanda_cur, 0, (n+1) * sizeof(int));
struct comanda_input { int care, sus; };
struct comanda_input *comenzi = malloc(m * sizeof(struct comanda_input));
struct comanda **comenzi_dupa_nod = malloc((n+1) * sizeof(struct comanda*));
for(int i = 1, t; i <= n; ++i){
fscanf(f, "%d", &t);
tata[i] = t;
++nr_copii[t]; }
for(int i = 0; i <= n; ++i){
copii[i] = malloc(nr_copii[i] * sizeof(int)); }
for(int i = 1; i <= n; ++i){
copii[tata[i]][copil_cur[tata[i]]++] = i; }
for(int i = 0, p, q; i < m; ++i){
fscanf(f, "%d %d", &q, &p);
comenzi[i].care = q;
comenzi[i].sus = p;
++nr_comenzi[q]; }
for(int i = 0; i <= n; ++i){
comenzi_dupa_nod[i] = malloc(nr_comenzi[i] * sizeof(struct comanda)); }
for(int i = 0; i < m; ++i){
const int care = comenzi[i].care;
comenzi_dupa_nod[care][comanda_cur[care]].sus = comenzi[i].sus;
comenzi_dupa_nod[care][comanda_cur[care]++].ind = i; }
int *rez = malloc(m * sizeof(int)), *stiva = malloc((n+1) * sizeof(int));
stiva[0] = 0;
dfs(stiva, stiva, nr_copii, copii, nr_comenzi, comenzi_dupa_nod, rez);
for(int i = 0; i < m; ++i){
fprintf(g, "%d\n", rez[i]); }
return 0; }