#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<vector>
#define maxa 100000
using namespace std ;
const int N = 1001000 ;
const int P = 1000100 ;
struct node {
int lson,rson ;
int val ;
int num ;
int ans ;
}a[N<<3] ;
int rt[P] ;
int n,m,cnt ;
int f[P][22],dep[P],fi[P] ;
bool vis[P] ;
vector<int> fq[P] ,rq[P] ;
inline int read() {
int ret = 0 ; char ch ;
while((ch=getchar())>'9'||ch<'0') ; ret = ch-'0' ;
while((ch=getchar())>='0'&&ch<='9') ret = ret*10+ch-'0' ;
return ret ;
}
void dfs1(int x) {
vis[x] = 1 ;
for(int i=0;i<fq[x].size() ;++i) {
int c = fq[x][i] ;
if(!vis[c]) rq[x].push_back(c),dfs1(c) ;
}
}
int deal(int x,int fa) {
dep[x] = dep[fa]+1 ; f[x][0] = fa ;
for(int i=0;i<20;++i) f[x][i+1] = f[f[x][i]][i] ;
for(int i=0;i<rq[x].size() ;++i) deal(rq[x][i],x) ;
}
int lca(int x,int y) {
if(dep[x]>dep[y]) swap(x,y) ;
for(int i=20;i>=0;--i) {
if(dep[f[y][i]]>=dep[x]) y=f[y][i] ;
if(x==y) return y ;
}
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] ;
}
void pushup(int k) {
if(a[a[k].lson ].ans >=a[a[k].rson ].ans ) a[k].ans = a[a[k].lson ].ans , a[k].num = a[a[k].lson ].num ;
else a[k].ans = a[a[k].rson ].ans , a[k].num = a[a[k].rson ].num ;
}
int change(int &k,int val,int pls,int l,int r) {
if(!k) {
cnt++ ;
k = cnt ;
}
if(l ==r ) {
a[k].num = l ;
a[k].ans +=pls ;
return k ;
}
int mid = l+r>>1 ;
if(mid>=val) change(a[k].lson ,val,pls,l,mid) ;
else change(a[k].rson ,val,pls,mid+1,r) ;
pushup(k) ;
return k ;
}
int merge(int x,int y,int l,int r) {
if(!x) return y ;
if(!y) return x ;
if(l==r) {
a[x].num = l ;
a[x].ans = a[x].ans +a[y].ans ;
return x ;
}
int mid = l+r>>1 ;
a[x].lson = merge(a[x].lson ,a[y].lson ,l,mid) ;
a[x].rson = merge(a[x].rson ,a[y].rson ,mid+1,r) ;
pushup(x) ; return x ;
}
void dfs2(int x) {
for(int i=0;i<rq[x].size() ;++i) {
int c = rq[x][i] ;
dfs2(c) ; rt[x] = merge(x,c,1,maxa) ;
}
if(a[rt[x]].ans ) fi[x] = a[rt[x]].num ;
}
void init() {
n = read() ; m = read() ;
for(int i=1;i<=n;++i) rt[i] = ++cnt ;
for(int i=1;i<n;++i) {
int x,y ;
x = read() ; y = read() ;
fq[x].push_back(y) ;
fq[y].push_back(x) ;
}
dfs1(1) ; deal(1,0) ;
for(int i=1;i<=m;++i) {
int x,y,z,l ;
x = read() ; y = read() ; z = read() ;
l = lca(x,y) ;
rt[x] = change(rt[x],z,1,1,maxa) ;
rt[y] = change(rt[y],z,1,1,maxa) ;
rt[l] = change(rt[l],z,-1,1,maxa) ;
if(f[l][0]) rt[f[l][0]] = change(rt[f[l][0]],z,-1,1,maxa) ;
}
}
void Print_nnq() { for(int i=1;i<=n;++i) cout<<fi[i]<<endl ; }
int main()
{
init() ;
dfs2(1) ;
Print_nnq() ;
}