# class INPUT: # def __init__(self): # self._l=open(0).read().split() # self._length=len(self._l) # self._index=0 # return # def stream(self,k=1,f=int,f2=False): # assert(-1 return left all # listを変数で受け取るとき、必ずlistをTrueにすること。 # """ from sys import setrecursionlimit from collections import deque setrecursionlimit(10000000) def main(): #N,Q=pin(2) N,Q=map(int,input().split()) assert(2<=N<=10**5) assert(1<=Q<=10**5) d=[[]for _ in[0]*N] for _ in[0]*(N-1): #a,b=pin(2) a,b=map(int,input().split()) assert(1<=a<=N) assert(1<=b<=N) d[a-1].append(b-1) d[b-1].append(a-1) cnt=[1]*N B=[0]*N def f(i): B[i]=1 for j in d[i]: if B[j]==0: f(j) cnt[i]+=cnt[j] return f(0) ans=0 for _ in[0]*Q: #p,x=pin(2) p,x=map(int,input().split()) assert(1<=p<=N) assert(1<=x<=10**8) ans+=cnt[p-1]*x print(ans) # is_input=False # try: # input() # is_input=True # except: # pass # if is_input: # raise Exception # return main()