#include <bits/stdc++.h>
using namespace std;
int n, q;
vector <int> e[100010];
int ti, pos[100010], ord[100010];
int minc[100010];
void dfs1(int u) {
minc[u] = n + 1;
for (auto v: e[u]) {
dfs1(v);
if (minc[v] < minc[u]) {
minc[u] = minc[v];
}
}
minc[u] = min(minc[u], u);
}
void dfs2(int u) {
ord[ti] = u;
pos[u] = ti--;
for (auto v: e[u]) dfs2(v);
}
int st[400010];
void update(int id, int l, int r, int i, int val) {
if (i > r || i < l) return;
if (l == r) {
st[id] = 1;
return;
}
int mid = l + r >> 1;
update(id * 2, l, mid, i, val);
update(id * 2 + 1, mid + 1, r, i, val);
st[id] = min(st[id * 2], st[id * 2 + 1]);
}
int get(int id, int l, int r) {
if (l == r) return l;
int mid = l + r >> 1;
if (st[id * 2] == 0) return get(id * 2, l, mid);
else return get(id * 2 + 1, mid + 1, r);
}
int cmp(int u, int v) {
return minc[u] > minc[v];
}
int main() {
scanf("%d%d", &n, &q);
for (int i = 1; i <= n; ++i) {
int p;
scanf("%d", &p);
e[p].push_back(i);
}
ti = n;
dfs1(e[0].front());
for (int u = 1; u <= n; ++u)
sort(e[u].begin(), e[u].end(), cmp);
dfs2(e[0].front());
// for (int i = 1; i <= n; ++i) cout << ord[i] << " ";
while (q--) {
int c, k;
scanf("%d%d", &c, &k);
if (c == 1) {
int ans = 0;
while (k--) {
ans = get(1, 1, n);
update(1, 1, n, ans, 1);
}
cout << ord[ans] << "\n";
}
else {
update(1, 1, n, k, 0);
cout << "0\n";
}
}
}