#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#include<bits/stdc++.h>
using namespace std;
// #define int long long
#define fi first
#define se second
#define siz(x) (int)(x.size())
#define all(x) x.begin(), x.end()
#define debug_arr(x,len) for(int _=1; _<=len; _++) cout<<x[_]<<" "; cout<<'\n';
#define debug(x) cout<<'\n'<<#x<<": "<<x<<'\n';
const int maxN = 5e4+5;
int n, m, q, a[maxN], ans[maxN];
vector<int>adj[maxN];
multiset<int>s[maxN];
void dfs(int u, int v)
{
for(auto i: adj[u])
{
if(i == v) continue;
dfs(i,u);
if(siz(s[u]) < siz(s[i])) swap(s[u], s[i]);
for(auto j: s[i])
{
s[u].insert(j);
auto tmp = s[u].find(j);
tmp++;
auto xet = s[u].begin(); xet--;
if(tmp != s[u].end()) ans[u] = min(ans[u], *tmp - j);
tmp--;
if(tmp == s[u].begin()) continue;
tmp--;
if(tmp != s[u].end())
{
ans[u] = min(ans[u], j - *tmp);
}
}
ans[u] = min(ans[u], ans[i]);
}
}
void solve()
{
}
int32_t main()
{
ios_base::sync_with_stdio(0); cin.tie(0);
cin>>n>>m;
for(int i=1; i<=n; i+=1) ans[i] = (1ll<<31) - 1;
for(int i=2; i<=n; i+=1)
{
int x; cin>>x;
adj[x].push_back(i);
adj[i].push_back(x);
}
for(int i=n-m+1; i<=n; i+=1) cin>>a[i];
for(int i=n-m+1; i<=n; i+=1) s[i].insert(a[i]);
dfs(1, 0);
for(int i=1; i<=n-m; i+=1)
{
cout<<ans[i]<<' ';
}
}
I3ByYWdtYSBHQ0Mgb3B0aW1pemUoIk9mYXN0IikKI3ByYWdtYSBHQ0Mgb3B0aW1pemUoInVucm9sbC1sb29wcyIpCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci8vICNkZWZpbmUgaW50IGxvbmcgbG9uZwojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgc2l6KHgpIChpbnQpKHguc2l6ZSgpKQojZGVmaW5lIGFsbCh4KSB4LmJlZ2luKCksIHguZW5kKCkKI2RlZmluZSBkZWJ1Z19hcnIoeCxsZW4pIGZvcihpbnQgXz0xOyBfPD1sZW47IF8rKykgY291dDw8eFtfXTw8IiAiOyBjb3V0PDwnXG4nOwojZGVmaW5lIGRlYnVnKHgpIGNvdXQ8PCdcbic8PCN4PDwiOiAiPDx4PDwnXG4nOwpjb25zdCBpbnQgbWF4TiA9IDVlNCs1OwoKaW50IG4sIG0sIHEsIGFbbWF4Tl0sIGFuc1ttYXhOXTsKdmVjdG9yPGludD5hZGpbbWF4Tl07Cm11bHRpc2V0PGludD5zW21heE5dOwoKdm9pZCBkZnMoaW50IHUsIGludCB2KQp7Cglmb3IoYXV0byBpOiBhZGpbdV0pCgl7CgkJaWYoaSA9PSB2KSBjb250aW51ZTsKCQlkZnMoaSx1KTsKCQlpZihzaXooc1t1XSkgPCBzaXooc1tpXSkpIHN3YXAoc1t1XSwgc1tpXSk7CgkJZm9yKGF1dG8gajogc1tpXSkKCQl7CgkJCXNbdV0uaW5zZXJ0KGopOwoJCQlhdXRvIHRtcCA9IHNbdV0uZmluZChqKTsKCQkJdG1wKys7CgkJCWF1dG8geGV0ID0gc1t1XS5iZWdpbigpOyB4ZXQtLTsKCQkJaWYodG1wICE9IHNbdV0uZW5kKCkpIGFuc1t1XSA9IG1pbihhbnNbdV0sICp0bXAgLSBqKTsKCQkJdG1wLS07CgkJCWlmKHRtcCA9PSBzW3VdLmJlZ2luKCkpIGNvbnRpbnVlOwoJCQl0bXAtLTsKCQkJaWYodG1wICE9IHNbdV0uZW5kKCkpCgkJCXsKCQkJIAlhbnNbdV0gPSBtaW4oYW5zW3VdLCBqIC0gKnRtcCk7CgkJCX0KCQl9CgkJYW5zW3VdID0gbWluKGFuc1t1XSwgYW5zW2ldKTsKCX0KfQoKdm9pZCBzb2x2ZSgpCnsKCQp9CgppbnQzMl90IG1haW4oKQp7Cglpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOwoJY2luPj5uPj5tOwoJZm9yKGludCBpPTE7IGk8PW47IGkrPTEpIGFuc1tpXSA9ICgxbGw8PDMxKSAtIDE7Cglmb3IoaW50IGk9MjsgaTw9bjsgaSs9MSkKCXsKCQlpbnQgeDsgY2luPj54OwoJCWFkalt4XS5wdXNoX2JhY2soaSk7CgkJYWRqW2ldLnB1c2hfYmFjayh4KTsKCX0KCWZvcihpbnQgaT1uLW0rMTsgaTw9bjsgaSs9MSkgY2luPj5hW2ldOwoJZm9yKGludCBpPW4tbSsxOyBpPD1uOyBpKz0xKSBzW2ldLmluc2VydChhW2ldKTsKCWRmcygxLCAwKTsKCWZvcihpbnQgaT0xOyBpPD1uLW07IGkrPTEpCgl7CgkJY291dDw8YW5zW2ldPDwnICc7Cgl9Cn0=