// ROOT : DRAGON3012009
#include <bits/stdc++.h>
#define ll long long
#define ld long double
#define el "\n"
#define fast ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define __ROOT__ int main()
#pragma GCC optimize("O2")
#define FOR(i,l,r) for(int i = l ; i <= r ; i ++)
#define FORD(i,r,l) for(int i = r ; i >= l ; i --)
#define REP(i, a ) for(int i = 0 ; i < a ; i ++ )
#define fi first
#define se second
#define M 1000000007
#define MAXN 1000001
#define INF (1ll<<30)
#define BLOCK_SIZE 425
#define MAX_NODE 1001001
#define LOG 19
#define ALPHA_SIZE 26
#define BASE 311
#define NAME "file"
#define compare(v) sort((v).begin(), (v).end()); (v).erase(unique((v).begin(), (v).end()), (v).end());
using namespace std;
const ll MOD[] = {(ll)1e9 + 2277, (ll)1e9 + 5277, (ll)1e9 + 8277, (ll)1e9 + 9277, (ll) 1e9 + 7 };
const ll NMOD = 1;
const int dx[] = {-1, 0, 1,0};
const int dy[] = {0, 1, 0, -1};
//**Variable**//
ll n, q;
vector<ll> adj[MAXN];
vector<ll> used, temp;
ll d[MAXN];
ll tin[MAXN], tout[MAXN], euler[2 * MAXN], high[2 * MAXN];
ll st[2 * MAXN][LOG + 1];
ll time_dfs = 0;
//**Struct**//
//**Function**//
template<class X, class Y>
bool minimize(X &x, const Y &y) {
return x > y ? x = y, 1 : 0;
}
template<class X, class Y>
bool maximize(X &x, const Y &y) {
return x < y ? x = y, 1 : 0;
}
void dfs_lca(ll u, ll p, ll h = 0) {
tin[u] = ++time_dfs;
euler[time_dfs] = u;
high[time_dfs] = h;
for (ll v : adj[u]) if (v != p) {
dfs_lca(v, u, h + 1);
euler[++time_dfs] = u;
high[time_dfs] = h;
}
tout[u] = time_dfs;
}
void build_sparse() {
FOR(i, 1, time_dfs) st[i][0] = i;
FOR(j, 1, LOG) {
for (int i = 1; i + (1 << j) - 1 <= time_dfs; ++i) {
int l = st[i][j - 1];
int r = st[i + (1 << (j - 1))][j - 1];
st[i][j] = (high[l] < high[r] ? l : r);
}
}
}
ll get_lca(ll u, ll v) {
ll l = tin[u], r = tin[v];
if (l > r) swap(l, r);
int k = __lg(r - l + 1);
int lidx = st[l][k], ridx = st[r - (1 << k) + 1][k];
return euler[high[lidx] < high[ridx] ? lidx : ridx];
}
ll get_dist(ll u, ll v) {
ll lca = get_lca(u, v);
return high[tin[u]] + high[tin[v]] - 2 * high[tin[lca]];
}
void bfs() {
for (ll u : temp) used.push_back(u);
temp.clear();
memset(d, 0, sizeof d);
queue<ll> q;
for (ll u : used) {
q.push(u);
d[u] = 1;
}
while (!q.empty()) {
ll u = q.front(); q.pop();
for (ll v : adj[u]) {
if (!d[v]) {
d[v] = d[u] + 1;
q.push(v);
}
}
}
}
void init() {
cin >> n >> q;
FOR(i, 1, n - 1) {
ll x, y; cin >> x >> y;
adj[x].push_back(y);
adj[y].push_back(x);
}
dfs_lca(1, 0);
build_sparse();
temp.push_back(1);
bfs();
}
void solve() {
FOR(i, 1, q) {
ll t, u;
cin>> t>> u;
if (t == 1) {
temp.push_back(u);
if ((int)temp.size() >= BLOCK_SIZE) bfs();
} else {
ll ans = d[u] - 1 ;
for (ll v : temp) minimize(ans, get_dist(u, v));
cout << ans << el;
}
}
}
__ROOT__ {
// freopen("NAME.inp", "r", stdin);
// freopen("NAME.out", "w", stdout);
fast;
int t = 1; // cin >> t;
while (t--) {
init();
solve();
}
}
Ly8gUk9PVCA6IERSQUdPTjMwMTIwMDkKI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgbGQgbG9uZyBkb3VibGUKI2RlZmluZSBlbCAiXG4iCiNkZWZpbmUgZmFzdCBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKI2RlZmluZSBfX1JPT1RfXyBpbnQgbWFpbigpCiNwcmFnbWEgR0NDIG9wdGltaXplKCJPMiIpCiNkZWZpbmUgRk9SKGksbCxyKSBmb3IoaW50IGkgPSBsIDsgaSA8PSByIDsgaSArKykKI2RlZmluZSBGT1JEKGkscixsKSBmb3IoaW50IGkgPSByIDsgaSA+PSBsIDsgaSAtLSkKI2RlZmluZSBSRVAoaSwgYSApIGZvcihpbnQgaSA9IDAgOyBpIDwgYSA7IGkgKysgKQojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgTSAxMDAwMDAwMDA3CiNkZWZpbmUgTUFYTiAxMDAwMDAxCiNkZWZpbmUgSU5GICgxbGw8PDMwKQojZGVmaW5lIEJMT0NLX1NJWkUgNDI1CiNkZWZpbmUgTUFYX05PREUgMTAwMTAwMQojZGVmaW5lIExPRyAxOQojZGVmaW5lIEFMUEhBX1NJWkUgMjYKI2RlZmluZSBCQVNFIDMxMQojZGVmaW5lIE5BTUUgImZpbGUiCiNkZWZpbmUgY29tcGFyZSh2KSBzb3J0KCh2KS5iZWdpbigpLCAodikuZW5kKCkpOyAodikuZXJhc2UodW5pcXVlKCh2KS5iZWdpbigpLCAodikuZW5kKCkpLCAodikuZW5kKCkpOwp1c2luZyBuYW1lc3BhY2Ugc3RkOwpjb25zdCBsbCBNT0RbXSA9IHsobGwpMWU5ICsgMjI3NywgKGxsKTFlOSArIDUyNzcsIChsbCkxZTkgKyA4Mjc3LCAobGwpMWU5ICsgOTI3NywgKGxsKSAxZTkgKyA3IH07CmNvbnN0IGxsIE5NT0QgPSAxOwpjb25zdCBpbnQgZHhbXSA9IHstMSwgMCwgMSwwfTsKY29uc3QgaW50IGR5W10gPSB7MCwgMSwgMCwgLTF9OwovLyoqVmFyaWFibGUqKi8vCmxsIG4sIHE7CnZlY3RvcjxsbD4gYWRqW01BWE5dOwp2ZWN0b3I8bGw+IHVzZWQsIHRlbXA7CmxsIGRbTUFYTl07CmxsIHRpbltNQVhOXSwgdG91dFtNQVhOXSwgZXVsZXJbMiAqIE1BWE5dLCBoaWdoWzIgKiBNQVhOXTsKbGwgc3RbMiAqIE1BWE5dW0xPRyArIDFdOwpsbCB0aW1lX2RmcyA9IDA7Ci8vKipTdHJ1Y3QqKi8vCgovLyoqRnVuY3Rpb24qKi8vCnRlbXBsYXRlPGNsYXNzIFgsIGNsYXNzIFk+CmJvb2wgbWluaW1pemUoWCAmeCwgY29uc3QgWSAmeSkgewogICAgcmV0dXJuIHggPiB5ID8geCA9IHksIDEgOiAwOwp9CnRlbXBsYXRlPGNsYXNzIFgsIGNsYXNzIFk+CmJvb2wgbWF4aW1pemUoWCAmeCwgY29uc3QgWSAmeSkgewogICAgcmV0dXJuIHggPCB5ID8geCA9IHksIDEgOiAwOwp9Cgp2b2lkIGRmc19sY2EobGwgdSwgbGwgcCwgbGwgaCA9IDApIHsKICAgIHRpblt1XSA9ICsrdGltZV9kZnM7CiAgICBldWxlclt0aW1lX2Rmc10gPSB1OwogICAgaGlnaFt0aW1lX2Rmc10gPSBoOwogICAgZm9yIChsbCB2IDogYWRqW3VdKSBpZiAodiAhPSBwKSB7CiAgICAgICAgZGZzX2xjYSh2LCB1LCBoICsgMSk7CiAgICAgICAgZXVsZXJbKyt0aW1lX2Rmc10gPSB1OwogICAgICAgIGhpZ2hbdGltZV9kZnNdID0gaDsKICAgIH0KICAgIHRvdXRbdV0gPSB0aW1lX2RmczsKfQoKdm9pZCBidWlsZF9zcGFyc2UoKSB7CiAgICBGT1IoaSwgMSwgdGltZV9kZnMpIHN0W2ldWzBdID0gaTsKICAgIEZPUihqLCAxLCBMT0cpIHsKICAgICAgICBmb3IgKGludCBpID0gMTsgaSArICgxIDw8IGopIC0gMSA8PSB0aW1lX2RmczsgKytpKSB7CiAgICAgICAgICAgIGludCBsID0gc3RbaV1baiAtIDFdOwogICAgICAgICAgICBpbnQgciA9IHN0W2kgKyAoMSA8PCAoaiAtIDEpKV1baiAtIDFdOwogICAgICAgICAgICBzdFtpXVtqXSA9IChoaWdoW2xdIDwgaGlnaFtyXSA/IGwgOiByKTsKICAgICAgICB9CiAgICB9Cn0KCmxsIGdldF9sY2EobGwgdSwgbGwgdikgewogICAgbGwgbCA9IHRpblt1XSwgciA9IHRpblt2XTsKICAgIGlmIChsID4gcikgc3dhcChsLCByKTsKICAgIGludCBrID0gX19sZyhyIC0gbCArIDEpOwogICAgaW50IGxpZHggPSBzdFtsXVtrXSwgcmlkeCA9IHN0W3IgLSAoMSA8PCBrKSArIDFdW2tdOwogICAgcmV0dXJuIGV1bGVyW2hpZ2hbbGlkeF0gPCBoaWdoW3JpZHhdID8gbGlkeCA6IHJpZHhdOwp9CgpsbCBnZXRfZGlzdChsbCB1LCBsbCB2KSB7CiAgICBsbCBsY2EgPSBnZXRfbGNhKHUsIHYpOwogICAgcmV0dXJuIGhpZ2hbdGluW3VdXSArIGhpZ2hbdGluW3ZdXSAtIDIgKiBoaWdoW3RpbltsY2FdXTsKfQoKdm9pZCBiZnMoKSB7CiAgICBmb3IgKGxsIHUgOiB0ZW1wKSB1c2VkLnB1c2hfYmFjayh1KTsKICAgIHRlbXAuY2xlYXIoKTsKCiAgICBtZW1zZXQoZCwgMCwgc2l6ZW9mIGQpOwogICAgcXVldWU8bGw+IHE7CiAgICBmb3IgKGxsIHUgOiB1c2VkKSB7CiAgICAgICAgcS5wdXNoKHUpOwogICAgICAgIGRbdV0gPSAxOwogICAgfQoKICAgIHdoaWxlICghcS5lbXB0eSgpKSB7CiAgICAgICAgbGwgdSA9IHEuZnJvbnQoKTsgcS5wb3AoKTsKICAgICAgICBmb3IgKGxsIHYgOiBhZGpbdV0pIHsKICAgICAgICAgICAgaWYgKCFkW3ZdKSB7CiAgICAgICAgICAgICAgICBkW3ZdID0gZFt1XSArIDE7CiAgICAgICAgICAgICAgICBxLnB1c2godik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KCnZvaWQgaW5pdCgpIHsKICAgIGNpbiA+PiBuID4+IHE7CiAgICBGT1IoaSwgMSwgbiAtIDEpIHsKICAgICAgICBsbCB4LCB5OyBjaW4gPj4geCA+PiB5OwogICAgICAgIGFkalt4XS5wdXNoX2JhY2soeSk7CiAgICAgICAgYWRqW3ldLnB1c2hfYmFjayh4KTsKICAgIH0KICAgIGRmc19sY2EoMSwgMCk7CiAgICBidWlsZF9zcGFyc2UoKTsKICAgIHRlbXAucHVzaF9iYWNrKDEpOwogICAgYmZzKCk7Cn0Kdm9pZCBzb2x2ZSgpIHsKICAgIEZPUihpLCAxLCBxKSB7CiAgICAgICAgbGwgdCwgdTsKICAgICAgICBjaW4+PiB0Pj4gdTsKICAgICAgICBpZiAodCA9PSAxKSB7CiAgICAgICAgICAgIHRlbXAucHVzaF9iYWNrKHUpOwogICAgICAgICAgICBpZiAoKGludCl0ZW1wLnNpemUoKSA+PSBCTE9DS19TSVpFKSBiZnMoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBsbCBhbnMgPSAgZFt1XSAtIDEgOwogICAgICAgICAgICBmb3IgKGxsIHYgOiB0ZW1wKSBtaW5pbWl6ZShhbnMsIGdldF9kaXN0KHUsIHYpKTsKICAgICAgICAgICAgY291dCA8PCBhbnMgPDwgZWw7CiAgICAgICAgfQogICAgfQp9CgpfX1JPT1RfXyB7CiAgICAvLyBmcmVvcGVuKCJOQU1FLmlucCIsICJyIiwgc3RkaW4pOwogICAgLy8gZnJlb3BlbigiTkFNRS5vdXQiLCAidyIsIHN0ZG91dCk7CiAgICBmYXN0OwogICAgaW50IHQgPSAxOyAvLyBjaW4gPj4gdDsKICAgIHdoaWxlICh0LS0pIHsKICAgICAgICBpbml0KCk7CiAgICAgICAgc29sdmUoKTsKICAgIH0KfQo=