#include <bits/stdc++.h>
using namespace std;
int n, m;
vector <int> G[1000005];
int is[1000005];
int cnt;
int dfs(int v, int k, int f) {
int result = 0;
for(int i = 0; i < G[v].size(); i++) {
int &u = G[v][i];
if(u == f) continue;
int x = dfs(u,k,v);
cerr << "vertex " << u << " = " << x << endl;
if(x == 0) continue;
if(result == 0) {
result = x;
} else if(x < 0) {
if(result > 0) {
if(-x-1 >= result) {
result = x;
}
} else {
result = min(result,x);
}
} else {
if(result < 0) {
if(x > -result-1) {
result = x;
}
} else {
result = max(result,x);
}
}
}
if(result != 0) {
if(result == k) {
cnt++;
return -k;
} else {
return result+1;
}
} else {
if(k == 0 && is[v]) {
cnt++;
return 0;
}
return is[v];
}
}
int main() {
scanf("%d %d",&n,&m);
for(int i = 0; i < n; i++)
scanf("%d",&is[i+1]);
for(int i = 0; i < n-1; i++) {
int a, b;
scanf("%d %d",&a,&b);
G[a].push_back(b);
G[b].push_back(a);
}
int s = 0;
int t = n;
cerr << "For 2" << endl;
dfs(1, 2, -1);
while(s < t) {
cnt = 0;
int mid = (s+t)/2;
cerr << "Binary search " << mid << endl;
int x = dfs(1,mid,-1);
if(x > 0) cnt++;
// cerr << "Result " << " = " << cnt << endl;
if(cnt <= m) {
t = mid;
} else {
s = mid+1;
}
}
printf("%d\n",s);
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbiwgbTsKdmVjdG9yIDxpbnQ+IEdbMTAwMDAwNV07CmludCBpc1sxMDAwMDA1XTsKCgppbnQgY250OwoKaW50IGRmcyhpbnQgdiwgaW50IGssIGludCBmKSB7CgkKCWludCByZXN1bHQgPSAwOwoJCglmb3IoaW50IGkgPSAwOyBpIDwgR1t2XS5zaXplKCk7IGkrKykgewoJCWludCAmdSA9IEdbdl1baV07CgkJaWYodSA9PSBmKSBjb250aW51ZTsKCQlpbnQgeCA9IGRmcyh1LGssdik7CiAJCWNlcnIgPDwgInZlcnRleCAiIDw8IHUgPDwgIiA9ICIgPDwgeCA8PCBlbmRsOwoJCWlmKHggPT0gMCkgY29udGludWU7CgkJaWYocmVzdWx0ID09IDApIHsKCQkJcmVzdWx0ID0geDsKCQl9IGVsc2UgaWYoeCA8IDApIHsKCQkJaWYocmVzdWx0ID4gMCkgewoJCQkJaWYoLXgtMSA+PSByZXN1bHQpIHsKCQkJCQlyZXN1bHQgPSB4OwoJCQkJfQoJCQl9IGVsc2UgewoJCQkJcmVzdWx0ID0gbWluKHJlc3VsdCx4KTsKCQkJfQoJCX0gZWxzZSB7CgkJCWlmKHJlc3VsdCA8IDApIHsKCQkJCWlmKHggPiAtcmVzdWx0LTEpIHsKCQkJCQlyZXN1bHQgPSB4OwoJCQkJfQoJCQl9IGVsc2UgewoJCQkJcmVzdWx0ID0gbWF4KHJlc3VsdCx4KTsKCQkJfQoJCX0KCX0KCglpZihyZXN1bHQgIT0gMCkgewoJCWlmKHJlc3VsdCA9PSBrKSB7CgkJCWNudCsrOwoJCQlyZXR1cm4gLWs7CgkJfSBlbHNlIHsKCQkJcmV0dXJuIHJlc3VsdCsxOwoJCX0KCX0gZWxzZSB7CgkJaWYoayA9PSAwICYmIGlzW3ZdKSB7CgkJCWNudCsrOwoJCQlyZXR1cm4gMDsKCQl9CgkJcmV0dXJuIGlzW3ZdOwoJfQp9CgppbnQgbWFpbigpIHsKCXNjYW5mKCIlZCAlZCIsJm4sJm0pOwoJZm9yKGludCBpID0gMDsgaSA8IG47IGkrKykKCQlzY2FuZigiJWQiLCZpc1tpKzFdKTsKCWZvcihpbnQgaSA9IDA7IGkgPCBuLTE7IGkrKykgewoJCWludCBhLCBiOwoJCXNjYW5mKCIlZCAlZCIsJmEsJmIpOwoJCUdbYV0ucHVzaF9iYWNrKGIpOwoJCUdbYl0ucHVzaF9iYWNrKGEpOwoJfQoJCglpbnQgcyA9IDA7CglpbnQgdCA9IG47CgljZXJyIDw8ICJGb3IgMiIgPDwgZW5kbDsKCWRmcygxLCAyLCAtMSk7CgkKCXdoaWxlKHMgPCB0KSB7CgkJY250ID0gMDsKCQlpbnQgbWlkID0gKHMrdCkvMjsKIAkJY2VyciA8PCAiQmluYXJ5IHNlYXJjaCAiIDw8IG1pZCA8PCBlbmRsOwoJCWludCB4ID0gZGZzKDEsbWlkLC0xKTsKCQkKCQlpZih4ID4gMCkgY250Kys7Ci8vIAkJY2VyciA8PCAiUmVzdWx0ICIgPDwgIiA9ICIgPDwgY250IDw8IGVuZGw7CgkJaWYoY250IDw9IG0pIHsKCQkJdCA9IG1pZDsKCQl9IGVsc2UgewoJCQlzID0gbWlkKzE7CgkJfQoJCQoJCQoJfQoJcHJpbnRmKCIlZFxuIixzKTsKCQp9