#include <bits/stdc++.h>
#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 compare(v) sort((v).begin(), (v).end()); (v).erase(unique((v).begin(), (v).end()), (v).end());
#define ll int
#define el "\n"
#define fi first
#define se second
#define _ROOT_ int main()
#define M 1000000007
#define MAXN 100002
#define LOG 19
#define Bit(i) (1LL << i )
#define INF (1ll<<30)
#define NAME "file"
#define BLOCK 500
#define debug(a) cout << #a << " = " << a << endl;
using namespace std;
ll n, m, q;
ll total_sum;
ll high[MAXN] ;
ll dist[MAXN] ;
ll d[MAXN ] ;
ll st[MAXN], fin[MAXN], timeDfs ;
ll num_color[MAXN ] ;
ll curC ;
ll mu[MAXN];
bool prime[MAXN];
vector<ll> primes;
vector<pair<ll, ll>> adj[MAXN ] ;
vector<ll> red , cur ;
ll euler[2 * MAXN];
ll first_pos[MAXN];
ll euler_cnt;
ll lg2[2 * MAXN];
pair<ll, ll> rmq[2 * MAXN][LOG + 1];
void dfs(ll u, ll p) {
st[u] = ++ timeDfs ;
euler[++euler_cnt] = u;
first_pos[u] = euler_cnt;
for(auto [v, weight] : adj[u]) if(v != p ) {
high[v] = high[u] + 1 ;
dist[v] = dist[u] + weight;
dfs(v, u ) ;
euler[++euler_cnt] = u;
}
fin[u] = timeDfs;
}
void bfs() {
for(ll v : red )cur.push_back(v) ;
FOR(i, 1, n ) d[i] = INF ;
red.clear() ;
queue<ll> q ;
for(ll v : cur ) d[v] = 0, q.push(v) ;
red.clear() ;
while(!q.empty() ) {
ll u = q.front() ;
q.pop() ;
for(auto [v , w ] : adj[u]) if(d[v] == INF ) {
d[v] = d[u] + 1 ;
q.push(v) ;
}
}
}
void init_lca() {
FOR(i, 1, euler_cnt) {
rmq[i][0] = {high[euler[i]], euler[i]};
}
lg2[1] = 0;
FOR(i, 2, euler_cnt) lg2[i] = lg2[i / 2] + 1;
FOR(j, 1, LOG) {
for (ll i = 1; i + (1 << j) - 1 <= euler_cnt; i++) {
rmq[i][j] = min(rmq[i][j - 1], rmq[i + (1 << (j - 1))][j - 1]);
}
}
}
ll LCA(ll u, ll v ) {
ll l = first_pos[u];
ll r = first_pos[v];
if (l > r) swap(l, r);
ll k = lg2[r - l + 1];
return min(rmq[l][k], rmq[r - (1 << k) + 1][k]).second;
}
ll LEN(ll a, ll b ) {
return dist[a] + dist[b] - 2 * dist[LCA(a, b ) ] ;
}
void init() {
cin >> n >> q ;
FOR(i, 2, n ) {
ll x, y, w = 1;
cin >> x >> y ;
adj[x].push_back({y, w}) ;
adj[y].push_back({x, w}) ;
}
}
void solve() {
high[1] = 0;
dfs(1, 1 ) ;
init_lca();
red.push_back(1) ;
bfs() ;
FOR(cnt, 1, q ) {
ll t, u ;
cin >> t >> u ;
if(t == 2 ) {
ll ans = d[u] ;
for(ll v : red ) ans = min(ans , LEN(u , v )) ;
// for(ll v : red ) {
// debug(u) ;
// debug(v) ;
// debug(LEN(u , v )) ;
// }
cout << ans << el ;
} else {
red.push_back(u) ;
if(red.size() > BLOCK ) bfs() ;
}
}
}
_ROOT_ {
// freopen(NAME".inp" , "r" , stdin);
// freopen(NAME".out" , "w", stdout) ;
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t = 1; // cin >> t ;
while(t--) {
init();
solve();
}
return (0&0);
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgRk9SKGksbCxyKSBmb3IoaW50IGkgPSBsIDsgaSA8PSByIDsgaSArKykKI2RlZmluZSBGT1JEKGkscixsKSBmb3IoaW50IGkgPSByIDsgaSA+PSBsIDsgaSAtLSkKI2RlZmluZSBSRVAoaSwgYSApIGZvcihpbnQgaSA9IDAgOyBpIDwgYSA7IGkgKysgKQojZGVmaW5lIGNvbXBhcmUodikgc29ydCgodikuYmVnaW4oKSwgKHYpLmVuZCgpKTsgKHYpLmVyYXNlKHVuaXF1ZSgodikuYmVnaW4oKSwgKHYpLmVuZCgpKSwgKHYpLmVuZCgpKTsKI2RlZmluZSBsbCBpbnQKI2RlZmluZSBlbCAiXG4iCiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBfUk9PVF8gaW50IG1haW4oKQojZGVmaW5lIE0gMTAwMDAwMDAwNwojZGVmaW5lIE1BWE4gMTAwMDAyCiNkZWZpbmUgTE9HIDE5CiNkZWZpbmUgQml0KGkpICgxTEwgPDwgaSApCiNkZWZpbmUgSU5GICgxbGw8PDMwKQojZGVmaW5lIE5BTUUgImZpbGUiCiNkZWZpbmUgQkxPQ0sgNTAwCiNkZWZpbmUgZGVidWcoYSkgY291dCA8PCAjYSA8PCAiID0gIiA8PCBhIDw8IGVuZGw7CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpsbCBuLCBtLCBxOwpsbCB0b3RhbF9zdW07CmxsIGhpZ2hbTUFYTl0gOwpsbCBkaXN0W01BWE5dIDsKbGwgZFtNQVhOIF0gOwpsbCBzdFtNQVhOXSwgZmluW01BWE5dLCB0aW1lRGZzIDsKbGwgbnVtX2NvbG9yW01BWE4gXSA7CmxsIGN1ckMgOwoKbGwgbXVbTUFYTl07CmJvb2wgcHJpbWVbTUFYTl07CnZlY3RvcjxsbD4gcHJpbWVzOwoKdmVjdG9yPHBhaXI8bGwsIGxsPj4gYWRqW01BWE4gXSA7CnZlY3RvcjxsbD4gcmVkICwgY3VyIDsKbGwgZXVsZXJbMiAqIE1BWE5dOwpsbCBmaXJzdF9wb3NbTUFYTl07CmxsIGV1bGVyX2NudDsKbGwgbGcyWzIgKiBNQVhOXTsKcGFpcjxsbCwgbGw+IHJtcVsyICogTUFYTl1bTE9HICsgMV07CgoKdm9pZCBkZnMobGwgdSwgbGwgcCkgewogICAgc3RbdV0gPSArKyB0aW1lRGZzIDsKICAgICAgICBldWxlclsrK2V1bGVyX2NudF0gPSB1OwogICAgZmlyc3RfcG9zW3VdID0gZXVsZXJfY250OwoKICAgIGZvcihhdXRvIFt2LCB3ZWlnaHRdIDogYWRqW3VdKSBpZih2ICE9IHAgKSB7CiAgICAgICAgICAgIGhpZ2hbdl0gPSBoaWdoW3VdICsgMSA7CiAgICAgICAgICAgIGRpc3Rbdl0gPSBkaXN0W3VdICsgd2VpZ2h0OwogICAgICAgICAgICBkZnModiwgdSAgKSA7CiAgICAgICAgICAgIGV1bGVyWysrZXVsZXJfY250XSA9IHU7CiAgICAgICAgfQogICAgZmluW3VdID0gdGltZURmczsKfQoKdm9pZCBiZnMoKSB7CiAgICBmb3IobGwgdiA6IHJlZCApY3VyLnB1c2hfYmFjayh2KSA7CiAgICBGT1IoaSwgMSwgbiApIGRbaV0gPSBJTkYgOwogICAgcmVkLmNsZWFyKCkgOyAKICAgIHF1ZXVlPGxsPiBxIDsKICAgIGZvcihsbCB2IDogY3VyICkgZFt2XSA9IDAsIHEucHVzaCh2KSA7CiAgICByZWQuY2xlYXIoKSA7CiAgICB3aGlsZSghcS5lbXB0eSgpICkgewogICAgICAgIGxsIHUgPSBxLmZyb250KCkgOwogICAgICAgIHEucG9wKCkgOwogICAgICAgIGZvcihhdXRvIFt2ICwgdyBdIDogYWRqW3VdKSBpZihkW3ZdID09IElORiApIHsKICAgICAgICAgICAgICAgIGRbdl0gPSBkW3VdICsgMSA7CiAgICAgICAgICAgICAgICBxLnB1c2godikgOwogICAgICAgICAgICB9CiAgICB9Cgp9Cgp2b2lkIGluaXRfbGNhKCkgewogICAgRk9SKGksIDEsIGV1bGVyX2NudCkgewogICAgICAgIHJtcVtpXVswXSA9IHtoaWdoW2V1bGVyW2ldXSwgZXVsZXJbaV19OwogICAgfQogICAgbGcyWzFdID0gMDsKICAgIEZPUihpLCAyLCBldWxlcl9jbnQpIGxnMltpXSA9IGxnMltpIC8gMl0gKyAxOwoKICAgIEZPUihqLCAxLCBMT0cpIHsKICAgICAgICBmb3IgKGxsIGkgPSAxOyBpICsgKDEgPDwgaikgLSAxIDw9IGV1bGVyX2NudDsgaSsrKSB7CiAgICAgICAgICAgIHJtcVtpXVtqXSA9IG1pbihybXFbaV1baiAtIDFdLCBybXFbaSArICgxIDw8IChqIC0gMSkpXVtqIC0gMV0pOwogICAgICAgIH0KICAgIH0KfQoKbGwgTENBKGxsIHUsIGxsIHYgKSB7CiAgICBsbCBsID0gZmlyc3RfcG9zW3VdOwogICAgbGwgciA9IGZpcnN0X3Bvc1t2XTsKICAgIGlmIChsID4gcikgc3dhcChsLCByKTsKICAgIGxsIGsgPSBsZzJbciAtIGwgKyAxXTsKICAgIHJldHVybiBtaW4ocm1xW2xdW2tdLCBybXFbciAtICgxIDw8IGspICsgMV1ba10pLnNlY29uZDsKfQoKbGwgTEVOKGxsIGEsIGxsIGIgKSB7CiAgICByZXR1cm4gZGlzdFthXSArIGRpc3RbYl0gLSAyICogZGlzdFtMQ0EoYSwgYiApIF0gOwp9CgoKCgp2b2lkIGluaXQoKSB7CiAgICBjaW4gPj4gbiA+PiBxIDsKICAgIEZPUihpLCAyLCBuICkgewogICAgICAgIGxsIHgsIHksIHcgID0gMTsKICAgICAgICBjaW4gPj4geCA+PiB5ICA7CiAgICAgICAgYWRqW3hdLnB1c2hfYmFjayh7eSwgd30pIDsKICAgICAgICBhZGpbeV0ucHVzaF9iYWNrKHt4LCB3fSkgOwogICAgfQp9Cgp2b2lkIHNvbHZlKCkgewogICAgaGlnaFsxXSA9IDA7CiAgICBkZnMoMSwgMSApIDsKICAgIGluaXRfbGNhKCk7CiAgICByZWQucHVzaF9iYWNrKDEpIDsKICAgIGJmcygpIDsKICAgIEZPUihjbnQsIDEsIHEgKSB7CiAgICAgICAgbGwgdCwgdSAgOwogICAgICAgIGNpbiA+PiB0ID4+IHUgOwogICAgICAgIGlmKHQgPT0gMiApIHsKICAgICAgICBsbCBhbnMgPSBkW3VdIDsKICAgICAgICBmb3IobGwgdiA6IHJlZCApIGFucyA9IG1pbihhbnMgLCBMRU4odSAsIHYgKSkgOwovLyAgICAgICAgZm9yKGxsIHYgOiByZWQgKSB7Ci8vICAgICAgICAgICAgICAgIGRlYnVnKHUpIDsKLy8gICAgICAgIGRlYnVnKHYpIDsKLy8gICAgICAgICAgICBkZWJ1ZyhMRU4odSAsIHYgKSkgOwovLyAgICAgICAgfQoKICAgICAgICBjb3V0IDw8IGFucyA8PCBlbCA7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmVkLnB1c2hfYmFjayh1KSA7CiAgICAgICAgICAgIGlmKHJlZC5zaXplKCkgPiBCTE9DSyApIGJmcygpIDsKICAgICAgICB9CiAgICB9Cn0KCl9ST09UXyB7CiAgICAvLyBmcmVvcGVuKE5BTUUiLmlucCIgLCAiciIgLCBzdGRpbik7CiAgICAvLyBmcmVvcGVuKE5BTUUiLm91dCIgLCAidyIsIHN0ZG91dCkgOwogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNpbi50aWUoMCk7CiAgICBjb3V0LnRpZSgwKTsKICAgIGludCB0ID0gMTsgLy8gY2luID4+IHQgOwogICAgd2hpbGUodC0tKSB7CiAgICAgICAgaW5pdCgpOwogICAgICAgIHNvbHZlKCk7CiAgICB9CiAgICByZXR1cm4gKDAmMCk7Cn0K