#include <bits/stdc++.h>

#define el '\n'
#define fi first
#define sec second
#define pb push_back
#define int long long
#define pii pair<int,int>
#define sz(v) (int)(v).size()
#define all(v) (v).begin(),(v).end()
#define FOR(i, a, b) for(int i = (a), _b = (b); i <= _b; i++)
#define REP(i, a, b) for(int i = (a), _b = (b); i >= _b; i--)

using namespace std;

const int INF = (int)1e18 + 462010;
const int MAX_N = 1e5;
const int LOG = 17;

vector<int> g[MAX_N + 5];
int best[MAX_N + 5];
int n, q;

namespace Centroid_Decomposition{
    int dist[LOG + 5][MAX_N + 5], lv[MAX_N + 5];
    int sub[MAX_N + 5], par[MAX_N + 5];
    vector<int> adj[MAX_N + 5];
    bool removed[MAX_N + 5];
    int root;

    void dfs_sz(int u, int dad){
        sub[u] = 1;
        for(int v : g[u]) if(v != dad && !removed[v]){
            dfs_sz(v, u);
            sub[u] += sub[v];
        }
    }

    int find_centroid(int u, int dad, int total){
        for(int v : g[u]) if(v != dad && !removed[v] && sub[v] > total / 2){
            return find_centroid(v, u, total);
        }
        return u;
    }

    void dfs_dist(int u, int dad, int level, int d){
        dist[level][u] = d;
        for(int v : g[u]) if(v != dad && !removed[v]){
            dfs_dist(v, u, level, d + 1);
        }
    }

    void build_centroid(int u, int pre, int level){
        dfs_sz(u, 0);
        int centroid = find_centroid(u, 0, sub[u]);

        if(!root) root = centroid;
        removed[centroid] = true;
        lv[centroid] = level;

        dfs_dist(centroid, 0, level, 0);

        if(pre != -1){
            adj[pre].pb(centroid);
            par[centroid] = pre;
        }

        for(int v : g[centroid]) if(!removed[v]){
            build_centroid(v, centroid, level + 1);
        }
    }

    void paint(int u){
        for(int v = u; v != 0; v = par[v]){
            best[v] = min(best[v], dist[lv[v]][u]);
        }
    }

    int query(int u){
        int res = INF;
        for(int v = u; v != 0; v = par[v]){
            res = min(res, best[v] + dist[lv[v]][u]);
        }
        return res;
    }
} using namespace Centroid_Decomposition;

void Input(){
    cin >> n >> q;
    FOR(i, 1, n - 1){
        int u, v;
        cin >> u >> v;

        g[u].pb(v);
        g[v].pb(u);
    }
}

void Prepare(){
    build_centroid(1, -1, 0);
    FOR(u, 1, n) best[u] = INF;
}

void Solve(){
    paint(1);
    while(q--){
        int type, x;
        cin >> type >> x;

        if(type == 1) paint(x);
        else cout << query(x) << el;
    }
}

signed main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    Input();
    Prepare();
    Solve();

    return 0;
}
