#include <bits/stdc++.h>
using namespace std;
//
const int mx = 2e5 + 5;
//
int N, K;
int root, h[mx], up[20][mx];
vector<int> adj[mx], meeting[mx];
//
void DFS (int u = root)
{
for (int v : adj[u])
{
if (v == up[0][u])
continue;
h[v] = h[u] + 1;
up[0][v] = u;
for (int i = 1; i < 20; ++i)
up[i][v] = up[i - 1][up[i - 1][v]];
DFS(v);
}
}
int dist (int u, int v)
{
int res = 0;
//
if (h[u] != h[v])
{
if (h[u] < h[v])
swap(u, v);
res = h[u] - h[v];
for (int i = 0; (1 << i) <= res; ++i)
if (res >> i & 1)
u = up[i][u];
}
if (u == v)
return res;
for (int i = __lg(h[v]); i >= 0; --i)
if (up[i][u] != up[i][v])
res += 2 << i,
u = up[i][u],
v = up[i][v];
return res + 2;
}
int solve (int idx)
{
int u, tmp, res = 0;
//
u = meeting[idx].front();
for (int v : meeting[idx])
if (res < dist(u, v))
res = dist(u, v),
tmp = v;
u = tmp;
for (int v : meeting[idx])
if (res < dist(u, v))
res = dist(u, v);
return res;
}
//
void process (void)
{
cin >> N >> K;
for (int i = 1; i <= N; ++i)
{
int x, y;
//
cin >> x >> y;
meeting[x].emplace_back(i);
if (y == 0)
root = i;
else
adj[i].emplace_back(y),
adj[y].emplace_back(i);
}
DFS();
for (int i = 1; i <= K; ++i)
cout << solve(i) << '\n';
}
//
signed main (void)
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr), cout.tie(nullptr);
process();
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci8vCmNvbnN0IGludCBteCA9IDJlNSArIDU7Ci8vCmludCBOLCBLOwppbnQgcm9vdCwgaFtteF0sIHVwWzIwXVtteF07CnZlY3RvcjxpbnQ+IGFkaltteF0sIG1lZXRpbmdbbXhdOwovLwp2b2lkIERGUyAoaW50IHUgPSByb290KQp7CiAgICBmb3IgKGludCB2IDogYWRqW3VdKQogICAgewogICAgICAgIGlmICh2ID09IHVwWzBdW3VdKQogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICBoW3ZdID0gaFt1XSArIDE7CiAgICAgICAgdXBbMF1bdl0gPSB1OwogICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgMjA7ICsraSkKICAgICAgICAgICAgdXBbaV1bdl0gPSB1cFtpIC0gMV1bdXBbaSAtIDFdW3ZdXTsKICAgICAgICBERlModik7CiAgICB9Cn0KaW50IGRpc3QgKGludCB1LCBpbnQgdikKewogICAgaW50IHJlcyA9IDA7CiAgICAvLwogICAgaWYgKGhbdV0gIT0gaFt2XSkKICAgIHsKICAgICAgICBpZiAoaFt1XSA8IGhbdl0pCiAgICAgICAgICAgIHN3YXAodSwgdik7CiAgICAgICAgcmVzID0gaFt1XSAtIGhbdl07CiAgICAgICAgZm9yIChpbnQgaSA9IDA7ICgxIDw8IGkpIDw9IHJlczsgKytpKQogICAgICAgICAgICBpZiAocmVzID4+IGkgJiAxKQogICAgICAgICAgICAgICAgdSA9IHVwW2ldW3VdOwogICAgfQogICAgaWYgKHUgPT0gdikKICAgICAgICByZXR1cm4gcmVzOwogICAgZm9yIChpbnQgaSA9IF9fbGcoaFt2XSk7IGkgPj0gMDsgLS1pKQogICAgICAgIGlmICh1cFtpXVt1XSAhPSB1cFtpXVt2XSkKICAgICAgICAgICAgcmVzICs9IDIgPDwgaSwKICAgICAgICAgICAgdSA9IHVwW2ldW3VdLAogICAgICAgICAgICB2ID0gdXBbaV1bdl07CiAgICByZXR1cm4gcmVzICsgMjsKfQppbnQgc29sdmUgKGludCBpZHgpCnsKICAgIGludCB1LCB0bXAsIHJlcyA9IDA7CiAgICAvLwogICAgdSA9IG1lZXRpbmdbaWR4XS5mcm9udCgpOwogICAgZm9yIChpbnQgdiA6IG1lZXRpbmdbaWR4XSkKICAgICAgICBpZiAocmVzIDwgZGlzdCh1LCB2KSkKICAgICAgICAgICAgcmVzID0gZGlzdCh1LCB2KSwKICAgICAgICAgICAgdG1wID0gdjsKICAgIHUgPSB0bXA7CiAgICBmb3IgKGludCB2IDogbWVldGluZ1tpZHhdKQogICAgICAgIGlmIChyZXMgPCBkaXN0KHUsIHYpKQogICAgICAgICAgICByZXMgPSBkaXN0KHUsIHYpOwogICAgcmV0dXJuIHJlczsKfQovLwp2b2lkIHByb2Nlc3MgKHZvaWQpCnsKICAgIGNpbiA+PiBOID4+IEs7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBOOyArK2kpCiAgICB7CiAgICAgICAgaW50IHgsIHk7CiAgICAgICAgLy8KICAgICAgICBjaW4gPj4geCA+PiB5OwogICAgICAgIG1lZXRpbmdbeF0uZW1wbGFjZV9iYWNrKGkpOwogICAgICAgIGlmICh5ID09IDApCiAgICAgICAgICAgIHJvb3QgPSBpOwogICAgICAgIGVsc2UKICAgICAgICAgICAgYWRqW2ldLmVtcGxhY2VfYmFjayh5KSwKICAgICAgICAgICAgYWRqW3ldLmVtcGxhY2VfYmFjayhpKTsKICAgIH0KICAgIERGUygpOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gSzsgKytpKQogICAgICAgIGNvdXQgPDwgc29sdmUoaSkgPDwgJ1xuJzsKfQovLwpzaWduZWQgbWFpbiAodm9pZCkKewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKG51bGxwdHIpLCBjb3V0LnRpZShudWxscHRyKTsKICAgIHByb2Nlc3MoKTsKfQo=