#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);
}
