#include<bits/stdc++.h>
#define FL(i,a,b) for(int i=(a);i<=(b);i++)
#define FR(i,a,b) for(int i=(a);i>=(b);i--)
#define ll long long
using namespace std;
const int MAXN = 1e5 + 10;
const int MAXM = 6e6 + 10;
struct node{
	int v,nxt;
}e[MAXN<<1];
int l[MAXM],r[MAXM],d[MAXM],t[MAXM];
int top[MAXN],fa[MAXN],head[MAXN],dep[MAXN],son[MAXN],sum[MAXN],x[MAXN],y[MAXN],z[MAXN],ans[MAXN];
int n,m,rt[MAXN],tot=0,maxx,cnt;
void add(int u,int v){
	e[++cnt].v=v;
	e[cnt].nxt=head[u];
	head[u]=cnt;
}
void dfs1(int u){
    sum[u]=1;
	int maxx=-1;
    for(int i=head[u];i;i=e[i].nxt){
    	if(!dep[e[i].v]){
	        dep[e[i].v]=dep[u]+1;
			fa[e[i].v]=u;
	        dfs1(e[i].v);
	        sum[u]+=sum[e[i].v];
	        if(sum[e[i].v]>maxx) maxx=sum[e[i].v],son[u]=e[i].v;
	    }
	}
    
}
void dfs2(int u,int topf){
    top[u]=topf;
    if(!son[u]) return;
    dfs2(son[u],topf);
    for(int i=head[u];i;i=e[i].nxt){
    	if(!top[e[i].v]) dfs2(e[i].v,e[i].v);
	}
}
int LCA(int u,int v){
    while(top[u]!=top[v]){
        if(dep[top[u]]<dep[top[v]]) swap(u,v);
        u=fa[top[u]];
    }
    if(dep[u]<dep[v]) return u;
	return v;
}
void pushup(int a){
    if(d[l[a]]>=d[r[a]]) d[a]=d[l[a]],t[a]=t[l[a]];
    else d[a]=d[r[a]],t[a]=t[r[a]];
}
int add(int a,int u,int v,int pos,int val){
    if(!a) a=++tot;
    if(u==v){
		d[a]+=val;
		t[a]=u;
		return a;
	}
    int mid=(u+v)>>1;
    if(pos<=mid) l[a]=add(l[a],u,mid,pos,val);
    else r[a]=add(r[a],mid+1,v,pos,val);
    pushup(a);
    return a;
}
int merge(int a,int b,int u,int v){
    if(!a) return b;
	if(!b) return a;
    if(u==v){
		d[a]+=d[b];
		t[a]=u;
		return a;
	}
    int mid=(u+v)>>1;
    l[a]=merge(l[a],l[b],u,mid);
	r[a]=merge(r[a],r[b],mid+1,v);
    pushup(a);
	return a;
}
void dfs3(int u){
    for(int i=head[u];i;i=e[i].nxt){
    	if(dep[e[i].v]>dep[u]) dfs3(e[i].v),rt[u]=merge(rt[u],rt[e[i].v],1,maxx);
	}
    if(d[rt[u]]) ans[u]=t[rt[u]];
}
int main(){
    scanf("%d%d",&n,&m);
	FL(i,1,n-1){
		int u,v;
		scanf("%d%d",&u,&v);
		add(u,v);
		add(v,u);
	}
    dep[1]=1;
	dfs1(1);
	dfs2(1,1);
    FL(i,1,m){
    	scanf("%d%d%d",&x[i],&y[i],&z[i]);
		maxx=max(maxx,z[i]); 
	}
    FL(i,1,m){
        int lca=LCA(x[i],y[i]);
        rt[x[i]]=add(rt[x[i]],1,maxx,z[i],1);
		rt[y[i]]=add(rt[y[i]],1,maxx,z[i],1);
        rt[lca]=add(rt[lca],1,maxx,z[i],-1);
        if(fa[lca]) rt[fa[lca]]=add(rt[fa[lca]],1,maxx,z[i],-1);
    }
    dfs3(1);
    FL(i,1,n) printf("%d\n",ans[i]);
    return 0;
}