#include
using namespace std;
typedef long long ll;
const int INF = (1<<30);
const ll inf = (1LL << 55LL);
const int maxn = 300004;
vector graph[maxn];
int arr[maxn];
int parent[maxn];
bool visited[maxn];
//1000000000
int n, S;
int tmpArr[maxn];
int ret;
void dfs(int node){
if(node == 0){
return;
}
int sosed;
for(int i =0 ; i <(int)graph[node].size(); i ++){
sosed = graph[node][i];
if(sosed != parent[node])continue;
if(tmpArr[node] > tmpArr[sosed]){
ret ++;
tmpArr[sosed] = tmpArr[node] ;
dfs(sosed);
}
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin >> n >> arr[0];
int a, b;
for(int i = 1; i <= n; i ++){
cin >> arr[i] >> b;
a = i;
parent[i] = b;
graph[a].push_back(b);
graph[b].push_back(a);
}
for(int j = 0; j <= n; j ++){
tmpArr[j] = arr[j];
}
for(int i = 1; i <= n; i ++){
ret = 0;
S = i;
dfs(i);
cout << ret << "\n";
}
return 0;
}