# include <algorithm>
# include <cassert>
# include <cstdio>
# include <cmath>
# include <vector>
using namespace std;
const int MAXN = 100005;
int n, m, vec[MAXN], ep, ST[MAXN], DR[MAXN], x, y;
bool viz[MAXN];
bool found;
int ai[MAXN << 2], cnt[MAXN << 2];
vector<int> G[MAXN];
void dfs (int node) {
vec[++vec[0]] = node, ST[node] = vec[0];
viz[node] = 1;
for (vector <int> :: iterator it = G[node].begin (); it != G[node].end (); ++it)
if (viz[*it] == 0)
dfs (*it);
DR[node] = vec[0];
}
/*void dfs(int node)
{
vec[++ep] = node;
ST[node] = ep;
viz[node] = 1;
int len = G[node].size();
for (int i = 0 ; i < len ; ++i)
if (viz[G[node][i]] == 0)
dfs(G[node][i]);
DR[node] = ep;
}*/
void update (int node, int st, int dr, int l, int val) {
if (ST[l] <= st && dr <= DR[l]) {
cnt[node] += val;
} else {
int mij = (st + dr) >> 1;
if (ST[l] <= mij) update (node << 1, st, mij, l, val);
if (mij < DR[l]) update ((node << 1) | 1, mij + 1, dr, l, val);
}
ai[node] = cnt[node] + max (ai[node << 1], ai[(node << 1) | 1]);
}
/*void update(int node, int left, int right, int x, int y)
{
if (ST[x] <= left && right <= DR[x])
cnt[node] += y;
else
{
int mid = (left + right) >> 1;
if (ST[x] <= mid)
update(node << 1, left, mid, x, y);
if (DR[x] > mid)
update((node << 1) | 1, mid + 1, right, x, y);
}
ai[node] = max(ai[node << 1], ai[(node << 1) | 1]) + cnt[node];
}*/
int query (int node, int st, int dr, int l) {
if ((l -= cnt[node]) == 0) {
printf ("%d\n", vec[st]);
return 1;
}
int value = 0;
if (st != dr && l > 0 && ai[node] - cnt[node] >= l) {
int mij = (st + dr) >> 1;
if ((value = query (node << 1, st, mij, l)) == 0)
value = query ((node << 1) | 1, mij + 1, dr, l);
}
l += cnt[node];
return value;
}
int main()
{
assert (freopen("arbore.in", "r", stdin));
assert (freopen("arbore.out","w",stdout));
assert (scanf("%d %d", &n, &m) == 2);
for (int i = 1 ; i < n ; ++i)
{
int a, b;
assert (scanf("%d %d", &a, &b) == 2);
G[a].push_back(b);
G[b].push_back(a);
}
dfs(1);
for (int i = 1 ; i <= m ; ++i)
{
int command;
assert (scanf("%d %d", &command, &x) == 2);
if (command == 1)
{
assert (scanf("%d", &y) == 1);
update(1, 1, n, x, y);
}
else
{
if (!query(1, 1, n, x))
printf("%d\n", -1);
}
}
return 0;
}