35pts WA
/*Code by Codercjh*/
#include<bits/stdc++.h>
#define fr(i,a,b) for(int i=(a);i<=(b);++i)
#define rf(i,a,b) for(int i=(a);i>=(b);--i)
#define min(a,b) (a<b?a:b)
#define max(a,b) (a>b?a:b)
using namespace std;
typedef long long ll;
template<typename T>
inline void read(T &x){
char c=getchar();T fh=0;bool f=false;
while(!isdigit(c))f|=(c=='-'),c=getchar();
while(isdigit(c))fh=(fh<<1)+(fh<<3)+(c^48),c=getchar();
x=f?-fh:fh;
return;
}
const int N=1e5+5;
int head[N],tot;
struct node{int to,nxt;}e[2*N];
inline void add(int x,int y){e[++tot]=(node){y,head[x]};head[x]=tot;}
struct Seg_tree{int lc,rc,dat,ans;}tr[60*N];
int n,m;
int f[N][18],dep[N],rt[N];
void dfs(int x,int fa){
f[x][0]=fa;
dep[x]=dep[fa]+1;
fr(i,1,17)f[x][i]=f[f[x][i-1]][i-1];
for(int i=head[x];i;i=e[i].nxt){
int y=e[i].to;
if(y==fa)continue;
dfs(y,x);
}
}
int lca(int x,int y){//LCA
if(dep[x]<dep[y])swap(x,y);
rf(i,17,0)if(dep[f[x][i]]>=dep[y])x=f[x][i];
if(x==y)return x;
rf(i,17,0)if(f[x][i]!=f[y][i])x=f[x][i],y=f[y][i];
return f[x][0];
}
int t;
int add(int p,int l,int r,int x,int v){
if(!p)p=++t;
if(l==r){
tr[p].dat+=v;
tr[p].ans=l;
return p;
}
int mid=(l+r)>>1;
if(x<=mid)tr[p].lc=add(tr[p].lc,l,mid,x,v);
else tr[p].rc=add(tr[p].rc,mid+1,r,x,v);
if(tr[tr[p].lc].dat>=tr[tr[p].rc].dat)tr[p].dat=tr[tr[p].lc].dat,tr[p].ans=tr[tr[p].lc].ans;
else tr[p].dat=tr[tr[p].rc].dat,tr[p].ans=tr[tr[p].rc].ans;
return p;
}
int merge(int p,int q,int l,int r){
if(!p)return q;
if(!q)return p;
if(l==r){
tr[p].dat+=tr[q].dat;
tr[p].ans=l;
return p;
}
int mid=(l+r)>>1;
tr[p].lc=merge(tr[p].lc,tr[q].lc,l,mid);
tr[p].rc=merge(tr[p].rc,tr[q].rc,mid+1,r);
if(tr[tr[p].lc].dat>=tr[tr[p].rc].dat)tr[p].dat=tr[tr[p].lc].dat,tr[p].ans=tr[tr[p].lc].ans;
else tr[p].dat=tr[tr[p].rc].dat,tr[p].ans=tr[tr[p].rc].ans;
return p;
}
int mx;
void dfs1(int x,int fa){
for(int i=head[x];i;i=e[i].nxt){
int y=e[i].to;
if(y==fa)continue;
dfs1(y,x);
rt[x]=merge(rt[x],rt[y],1,mx);
}
}
int ask(int p,int l,int r,int x){
if(l==r)return tr[p].dat;
int mid=(l+r)>>1;
if(x<=mid)return ask(tr[p].lc,l,mid,x);
return ask(tr[p].rc,mid+1,r,x);
}
int qx[N],qy[N],qz[N],xx[N],to;
int main(){
read(n),read(m);
int a,b;
fr(i,1,n-1)read(a),read(b),add(a,b),add(b,a);
dfs(1,0);
fr(i,1,m)read(qx[i]),read(qy[i]),read(qz[i]),xx[++to]=qz[i];
sort(xx+1,xx+to+1);
int sz=unique(xx+1,xx+to+1)-xx-1;
mx=sz;
fr(i,1,m){
int zx=lca(qx[i],qy[i]);
qz[i]=lower_bound(xx+1,xx+sz+1,qz[i])-xx;
rt[qx[i]]=add(rt[qx[i]],1,mx,qz[i],1);
rt[qy[i]]=add(rt[qy[i]],1,mx,qz[i],1);
rt[zx]=add(rt[zx],1,mx,qz[i],-1);
if(f[zx][0])rt[f[zx][0]]=add(rt[f[zx][0]],1,mx,qz[i],-1);
}
dfs1(1,0);
fr(i,1,n)printf("%d\n",tr[rt[i]].dat?xx[tr[rt[i]].ans]:0);
return 0;
}