#include <iostream>
#include <vector>
using namespace std;
const int maxn = 1e5 + 10;
const int B = 330;
const int L = 17;
int n, m, tot, head, tail, d[maxn], q[maxn], lg[maxn], dfn[maxn], f[maxn][L];
vector<int> g, e[maxn];
inline int cmp(int x, int y) { return dfn[x] < dfn[y] ? x : y; }
void dfs(int u, int pa) {
dfn[u] = ++tot; f[tot][0] = pa;
for (int v : e[u]) if (v != pa) d[v] = d[u] + 1, dfs(v, u);
}
int lca(int u, int v) {
if (u == v) return u;
if ((u = dfn[u]) > (v = dfn[v])) swap(u, v);
int x = lg[v - u++];
return cmp(f[u][x], f[v - (1 << x) + 1][x]);
}
int main() {
ios::sync_with_stdio(false);
cin >> n >> m;
for (int i = 1; i < n; i++) {
int u, v; cin >> u >> v;
e[u].push_back(v); e[v].push_back(u);
} dfs(1, 0);
for (int j = 1; j < L; j++)
for (int i = 1; i <= n - (1 << j) + 1; i++)
f[i][j] = cmp(f[i][j - 1], f[i + (1 << (j - 1))][j - 1]);
for (int i = 2; i <= n; i++) lg[i] = lg[i >> 1] + 1;
for (int l = 1, r = B; ; l += B, r += B) {
for (int i = l; i <= min(r, m); i++) {
int op, x; cin >> op >> x; if (op == 1) {g.push_back(x); continue;}
int res = d[x]; for (int v : g) res = min(res, d[x] + d[v] - (d[lca(x, v)] << 1));
cout << res << '\n';
} if (r >= m) break;
head = tail = 1; for (int v : g) q[tail++] = v, d[v] = 0;
while (head < tail) {
int u = q[head++];
for (int v : e[u]) if (d[v] > d[u] + 1)
d[v] = d[u] + 1, q[tail++] = v;
} g.clear();
} return 0;
}