#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 ans[MAXN]; int cnt=0; void dfs1(int d,int fa){ f[d][0]=fa; for(int i=1;(1<<i)<=dep[d];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]=x; a[d]+=y; return d; } 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]])?t[ls[d]]:t[rs[d]]; a[d]=max(a[ls[d]],a[rs[d]]); return d; } int merge(int x,int y,int l,int r){ if(!x){ return y; } if(!y){ return x; } if(lr){ a[x]+=a[y]; t[x]=l; return x; } ls[x]=merge(ls[x],ls[y],l,(l+r)/2); rs[x]=merge(rs[x],rs[y],(l+r)/2+1,r); t[x]=(a[ls[x]]>=a[rs[x]])?t[ls[x]]:t[rs[x]]; a[x]=max(a[ls[x]],a[rs[x]]); return x; } void dfs2(int d,int fa){ for(int i=0;i<v[d].size();i++){ int tmp=v[d][i]; if(tmpfa){ continue; } dfs2(tmp,d); rt[d]=merge(rt[d],rt[tmp],1,n); } if(a[rt[d]]){ ans[d]=t[rt[d]]; } } 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); if(f[lca(x,y)][0]){ 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",ans[i]); } }