#include<bits/stdc++.h>
using namespace std;
#define sd(mark) scanf("%d",&mark)
#define ss(mark) scanf("%s",&mark)
#define sl(mark) scanf("%lld",&mark)
#define debug(mark) printf("check%d\n",mark)
#define clr(mark) memset(mark,0,sizeof(mark))
#define F first
#define S second
#define MP make_pair
#define PB push_back
#define ll long long
#define INF 100000
int dp1[50010][20][30],dp2[50010][20][30];
int a[50010];
vector<int> v[50010];
int sz[50010];
int ans=1,k;
void go(int cur,int par)
{
int i,j,l;
for(i=0;i<sz[cur];++i)
if(v[cur][i]!=par)
go(v[cur][i],cur);
for(i=0;i<=10;++i)
for(j=0;j<=20;++j)
dp1[cur][i][j]=dp2[cur][i][j]=-INF;
for(i=0;i<k;++i)
{
for(j=0;j<=20;++j)
{
if(i==k-1&&j>a[cur])
continue;
int i2=k-2-i,j2=j;
if(i==k-1)
{
i2=k-1;j2=a[cur];
}
int maxx1=-INF,maxx2=-INF;
for(l=0;l<sz[cur];++l)
{
if(v[cur][l]==par) continue;
if(dp2[v[cur][l]][i2][j2]>maxx1)
{
maxx2=maxx1;
maxx1=dp2[v[cur][l]][i2][j2];
}
else if(dp2[v[cur][l]][i2][j2]>maxx2)
maxx2=dp2[v[cur][l]][i2][j2];
}
for(l=0;l<sz[cur];++l)
{
if(v[cur][l]==par)
continue;
if(dp2[v[cur][l]][i2][j2]!=maxx1)
ans=max(ans,dp1[v[cur][l]][i][j]+maxx1+1);
else
ans=max(ans,dp1[v[cur][l]][i][j]+maxx2+1);
}
}
}
dp1[cur][0][a[cur]]=1;
for(j=0;j<=a[cur];++j)
for(l=0;l<sz[cur];++l)
if(v[cur][l]!=par)
dp1[cur][0][a[cur]]=max(dp1[cur][0][a[cur]],1+dp1[v[cur][l]][k-1][j]);
for(i=1;i<k;++i)
for(j=0;j<=20;++j)
for(l=0;l<sz[cur];++l)
if(v[cur][l]!=par)
dp1[cur][i][j]=max(dp1[cur][i][j],1+dp1[v[cur][l]][i-1][j]);
dp2[cur][0][a[cur]]=1;
for(i=1;i<k;++i)
dp2[cur][i][20]=1;
for(j=a[cur];j<=20;++j)
for(l=0;l<sz[cur];++l)
if(v[cur][l]!=par)
dp2[cur][0][a[cur]]=max(dp2[cur][0][a[cur]],1+dp2[v[cur][l]][k-1][j]);
for(i=1;i<k;++i)
for(j=0;j<=20;++j)
for(l=0;l<sz[cur];++l)
if(v[cur][l]!=par)
dp2[cur][i][j]=max(dp2[cur][i][j],1+dp2[v[cur][l]][i-1][j]);
for(i=0;i<k;++i)
for(j=19;j>=0;--j)
dp2[cur][i][j]=max(dp2[cur][i][j],dp2[cur][i][j+1]);
for(i=0;i<k;++i)
for(j=0;j<=20;++j)
ans=max(ans,max(dp1[cur][i][j],dp2[cur][0][j]));
}
int main()
{
//freopen("in3.txt","r",stdin);
//freopen("out3.txt","w",stdout);
clock_t start = clock();
int n,i,x,y;
sd(n);sd(k);
for(i=1;i<=n;++i)
sd(a[i]);
for(i=0;i<n-1;++i)
{
sd(x);sd(y);
v[x].PB(y);
v[y].PB(x);
}
for(i=1;i<=n;++i)
sz[i]=v[i].size();
go(1,0);
printf("%d\n",ans);
//cerr<<ans<<'\n';
clock_t end = clock();
//cerr <<"Time: " <<(double)(end-start)/CLOCKS_PER_SEC <<" seconds" <<endl;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgc2QobWFyaykgc2NhbmYoIiVkIiwmbWFyaykKI2RlZmluZSBzcyhtYXJrKSBzY2FuZigiJXMiLCZtYXJrKQojZGVmaW5lIHNsKG1hcmspIHNjYW5mKCIlbGxkIiwmbWFyaykKI2RlZmluZSBkZWJ1ZyhtYXJrKSBwcmludGYoImNoZWNrJWRcbiIsbWFyaykKI2RlZmluZSBjbHIobWFyaykgbWVtc2V0KG1hcmssMCxzaXplb2YobWFyaykpCiNkZWZpbmUgRiBmaXJzdAojZGVmaW5lIFMgc2Vjb25kCiNkZWZpbmUgTVAgbWFrZV9wYWlyCiNkZWZpbmUgUEIgcHVzaF9iYWNrCiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgSU5GIDEwMDAwMAppbnQgZHAxWzUwMDEwXVsyMF1bMzBdLGRwMls1MDAxMF1bMjBdWzMwXTsKaW50IGFbNTAwMTBdOwp2ZWN0b3I8aW50PiB2WzUwMDEwXTsKaW50IHN6WzUwMDEwXTsKaW50IGFucz0xLGs7CnZvaWQgZ28oaW50IGN1cixpbnQgcGFyKQp7CglpbnQgaSxqLGw7Cglmb3IoaT0wO2k8c3pbY3VyXTsrK2kpCgkJaWYodltjdXJdW2ldIT1wYXIpCgkJCWdvKHZbY3VyXVtpXSxjdXIpOwoJZm9yKGk9MDtpPD0xMDsrK2kpCgkJZm9yKGo9MDtqPD0yMDsrK2opCgkJCWRwMVtjdXJdW2ldW2pdPWRwMltjdXJdW2ldW2pdPS1JTkY7CgkKCWZvcihpPTA7aTxrOysraSkKCXsKCQlmb3Ioaj0wO2o8PTIwOysraikKCQl7CgkJCWlmKGk9PWstMSYmaj5hW2N1cl0pCgkJCQljb250aW51ZTsKCQkJaW50IGkyPWstMi1pLGoyPWo7CgkJCWlmKGk9PWstMSkKCQkJewoJCQkJaTI9ay0xO2oyPWFbY3VyXTsKCQkJfQoJCQlpbnQgbWF4eDE9LUlORixtYXh4Mj0tSU5GOwoJCQlmb3IobD0wO2w8c3pbY3VyXTsrK2wpCgkJCXsKCQkJCWlmKHZbY3VyXVtsXT09cGFyKQljb250aW51ZTsKCQkJCWlmKGRwMlt2W2N1cl1bbF1dW2kyXVtqMl0+bWF4eDEpCgkJCQl7CgkJCQkJbWF4eDI9bWF4eDE7CgkJCQkJbWF4eDE9ZHAyW3ZbY3VyXVtsXV1baTJdW2oyXTsKCQkJCX0KCQkJCWVsc2UgaWYoZHAyW3ZbY3VyXVtsXV1baTJdW2oyXT5tYXh4MikKCQkJCQltYXh4Mj1kcDJbdltjdXJdW2xdXVtpMl1bajJdOwoJCQl9CgkJCWZvcihsPTA7bDxzeltjdXJdOysrbCkKCQkJewoJCQkJaWYodltjdXJdW2xdPT1wYXIpCgkJCQkJY29udGludWU7CgkJCQlpZihkcDJbdltjdXJdW2xdXVtpMl1bajJdIT1tYXh4MSkKCQkJCQlhbnM9bWF4KGFucyxkcDFbdltjdXJdW2xdXVtpXVtqXSttYXh4MSsxKTsKCQkJCWVsc2UKCQkJCQlhbnM9bWF4KGFucyxkcDFbdltjdXJdW2xdXVtpXVtqXSttYXh4MisxKTsJCgkJCX0KCQl9Cgl9CglkcDFbY3VyXVswXVthW2N1cl1dPTE7Cglmb3Ioaj0wO2o8PWFbY3VyXTsrK2opCgkJZm9yKGw9MDtsPHN6W2N1cl07KytsKQoJCQlpZih2W2N1cl1bbF0hPXBhcikKCQkJCWRwMVtjdXJdWzBdW2FbY3VyXV09bWF4KGRwMVtjdXJdWzBdW2FbY3VyXV0sMStkcDFbdltjdXJdW2xdXVtrLTFdW2pdKTsKCWZvcihpPTE7aTxrOysraSkKCQlmb3Ioaj0wO2o8PTIwOysraikKCQkJZm9yKGw9MDtsPHN6W2N1cl07KytsKQoJCQkJaWYodltjdXJdW2xdIT1wYXIpCgkJCQkJZHAxW2N1cl1baV1bal09bWF4KGRwMVtjdXJdW2ldW2pdLDErZHAxW3ZbY3VyXVtsXV1baS0xXVtqXSk7CgkKCWRwMltjdXJdWzBdW2FbY3VyXV09MTsKCWZvcihpPTE7aTxrOysraSkKCQlkcDJbY3VyXVtpXVsyMF09MTsKCWZvcihqPWFbY3VyXTtqPD0yMDsrK2opCgkJZm9yKGw9MDtsPHN6W2N1cl07KytsKQoJCQlpZih2W2N1cl1bbF0hPXBhcikKCQkJCWRwMltjdXJdWzBdW2FbY3VyXV09bWF4KGRwMltjdXJdWzBdW2FbY3VyXV0sMStkcDJbdltjdXJdW2xdXVtrLTFdW2pdKTsKCWZvcihpPTE7aTxrOysraSkKCQlmb3Ioaj0wO2o8PTIwOysraikKCQkJZm9yKGw9MDtsPHN6W2N1cl07KytsKQoJCQkJaWYodltjdXJdW2xdIT1wYXIpCgkJCQkJZHAyW2N1cl1baV1bal09bWF4KGRwMltjdXJdW2ldW2pdLDErZHAyW3ZbY3VyXVtsXV1baS0xXVtqXSk7Cglmb3IoaT0wO2k8azsrK2kpCgkJZm9yKGo9MTk7aj49MDstLWopCgkJCWRwMltjdXJdW2ldW2pdPW1heChkcDJbY3VyXVtpXVtqXSxkcDJbY3VyXVtpXVtqKzFdKTsKCWZvcihpPTA7aTxrOysraSkKCQlmb3Ioaj0wO2o8PTIwOysraikKCQkJYW5zPW1heChhbnMsbWF4KGRwMVtjdXJdW2ldW2pdLGRwMltjdXJdWzBdW2pdKSk7CgoJCn0KaW50IG1haW4oKQp7CgkvL2ZyZW9wZW4oImluMy50eHQiLCJyIixzdGRpbik7CgkvL2ZyZW9wZW4oIm91dDMudHh0IiwidyIsc3Rkb3V0KTsKCWNsb2NrX3Qgc3RhcnQgPSBjbG9jaygpOwoJaW50IG4saSx4LHk7CglzZChuKTtzZChrKTsKCWZvcihpPTE7aTw9bjsrK2kpCgkJc2QoYVtpXSk7Cglmb3IoaT0wO2k8bi0xOysraSkKCXsKCQlzZCh4KTtzZCh5KTsKCQl2W3hdLlBCKHkpOwoJCXZbeV0uUEIoeCk7Cgl9Cglmb3IoaT0xO2k8PW47KytpKQoJCXN6W2ldPXZbaV0uc2l6ZSgpOwoJZ28oMSwwKTsKCXByaW50ZigiJWRcbiIsYW5zKTsKCS8vY2Vycjw8YW5zPDwnXG4nOwoJCgljbG9ja190IGVuZCA9IGNsb2NrKCk7CgkvL2NlcnIgPDwiVGltZTogIiA8PChkb3VibGUpKGVuZC1zdGFydCkvQ0xPQ0tTX1BFUl9TRUMgPDwiIHNlY29uZHMiIDw8ZW5kbDsKfQ==