#include<bits/stdc++.h> using namespace std; const int MAXN=1e5+5; int n,m; int t[32MAXN],ls[32MAXN],rs[32MAXN]; int a[32MAXN]; vector v[MAXN]; int f[MAXN][20+5]; int rt[MAXN]; int dep[MAXN]; int cnt=0; void dfs1(int d,int fa){ f[d][0]=fa; for(int i=1;(1<<i)<=dep;i++){ f[d][i]=f[f[d][i-1]][i-1]; } for(int i=0;i<v[d].size();i++){ int tmp=v[d][i]; if(tmpfa){ continue; } dep[tmp]=dep[d]+1; dfs1(tmp,d); } } int lca(int x,int y){ if(dep[x]<dep[y]){ swap(x,y); } for(int i=20;i>=0;i--){ if(dep[f[x][i]]<=dep[y]){ x=f[x][i]; } } if(xy){ return x; } for(int i=20;i>=0;i--){ if(f[x][i]!=f[y][i]){ x=f[x][i]; y=f[y][i]; } } return f[x][0]; } int update(int d,int l,int r,int x,int y){ if(!d){ d=++cnt; } if(lx&&rx){ t[d]=y; a[d]+=y; return; } int mid=(l+r)/2; if(mid>=x){ ls[d]=update(ls[d],l,mid,x,y); } else{ rs[d]=update(rs[d],mid+1,r,x,y); } t[d]=a[ls[d]]>=a[rs[d]]?ls[d]:rs[d]; return d; } void merge(int a,int b){ if(!a){ return b; } if(!b){ return a; }

} int main(){ scanf("%d%d",&n,&m); for(int i=1;i<n;i++){ int x,y; scanf("%d%d",&x,&y); v[x].push_back(y); v[y].push_back(x); } dfs1(1,0); for(int i=1;i<=m;i++){ int x,y,z; scanf("%d%d%d",&x,&y,&z); rt[x]=update(rt[x],1,1e5,z,1); rt[y]=update(rt[y],1,1e5,z,1); rt[lca(x,y)]=update(rt[lca(x,y)],1,1e5,z,-1); rt[f[lca(x,y)][0]]=update(rt[f[lca(x,y)][0]],1,1e5,z,-1); } dfs2(1,0); for(int i=1;i<=n;i++){ printf("%d\n",t[rt[i]]); } }