n,p=map(int,input().split())
l=[[] for i in range (n+1)]
for i in range(n-1):
a,b=map(int,input().split())
l[a].append(b)
dp=[[float("inf") for i in range(p+1)] for i in range(n+1)]
def dfs(x):
dp[x][1]=len(l[x])
if not l[x]:
return
for i in l[x]:
dfs(i)
for j in range(p,1,-1):
for k in range(1,p):
if (k>j-1):break
dp[x][j]=min(dp[x][j],dp[x][j-k]+dp[i][k]-1)
dfs(1)
ans=dp[1][p]
for i in range(2,n+1):
ans=min(ans,dp[i][p]+1)
print(ans)
import sys
sys.setrecursionlimit(10000000)
n=int(input())
nn=[0]
for i in range(n):
nn.append(int(input()))
cnt=0
ss=sum(nn)
line=[0]
class node :
def __init__(self,v,w,ne):
self.v=v
self.w=w
self.ne=ne
dp=[0 for i in range(n+1)]
h=[0 for i in range(n+1)]
for i in range(n-1):
a,b,l=map(int,input().split())
cnt+=1
line.append(node(b,l,h[a]))
h[a]=cnt
cnt+=1
line.append(node(a,l,h[b]))
h[b]=cnt
def dfs1(x,fa):
ind=h[x]
while (ind!=0):
ll=line[ind]
if (ll.v==fa):
ind=ll.ne
continue
dfs1(ll.v,x)
nn[x]+=nn[ll.v]
dp[x]+=dp[ll.v]
dp[x]+=ll.w*nn[ll.v]
ind=ll.ne
dfs1(1,-1)
ans=dp[1]
def dfs2(x,fa):
global ans
ind = h[x]
while (ind != 0):
ll = line[ind]
if (ll.v == fa):
ind = ll.ne
continue
dp[ll.v]=dp[x]+(ss-nn[ll.v])*ll.w-nn[ll.v]*ll.w
ans=min(ans,dp[ll.v])
dfs2(ll.v,x)
ind = ll.ne
dfs2(1,-1)
print(ans)