#include<bits/stdc++.h>
#define int long long
#define MAXN 100001
#define inf 100000
using namespace std;
inline int read(){
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')
f=-f;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=x*10+ch-'0';
ch=getchar();
}
return x*f;
}
int n,m,cnt,ans[MAXN];
struct node{
int dep,dad,siz,maxson;
int id,top;
}a[MAXN];
vector<int> e[MAXN];
void dfs1(int x,int dad,int dep){
a[x].dep=dep;
a[x].dad=dad;
a[x].siz=1;
int mx=-MAXN;
for(int i=0;i<e[x].size();i++)
if(e[x][i]!=dad){
dfs1(e[x][i],x,dep+1);
a[x].siz+=a[e[x][i]].siz;
if(a[e[x][i]].siz>mx){
mx=a[e[x][i]].siz;
a[x].maxson=e[x][i];
}
}
}
void dfs2(int x,int top){
a[x].id=++cnt;
a[x].top=top;
if(!a[x].maxson)
return ;
dfs2(a[x].maxson,top);
for(int i=0;i<e[x].size();i++)
if(e[x][i]!=a[x].maxson&&e[x][i]!=a[x].dad)
dfs2(e[x][i],e[x][i]);
}
int lca(int u,int v){
while(a[u].top!=a[v].top){
if(a[a[u].top].dep<a[a[v].top].dep)
swap(u,v);
u=a[a[u].top].dad;
}
if(a[u].dep<a[v].dep)
return u;
return v;
}
int rot[MAXN],tot;
struct seg_tree{
int mx;
int l,r,id;
}t[MAXN*40];
void addtag(int &i){
if(!i){
i=++tot;
t[i].mx=0;
}
}
void pushup(int i){
t[i].mx=max(t[t[i].l].mx,t[t[i].r].mx);
int ls=t[i].l,rs=t[i].r;
if(t[ls].mx>=t[rs].mx)
t[i].id=t[ls].id;
else
t[i].id=t[rs].id;
}
void pushdown(int i){
addtag(t[i].l);
addtag(t[i].r);
}
void update(int i,int l,int r,int L,int R,int k){
if(l>R||r<L)
return ;
if(L<=l&&r<=R){
addtag(i);
t[i].id=l;
t[i].mx+=k;
return ;
}
pushdown(i);
int mid=(l+r-1)/2;
update(t[i].l,l,mid,L,R,k);
update(t[i].r,mid+1,r,L,R,k);
pushup(i);
}
int merge(int x1,int x2,int l,int r){
if(!x1)
return x2;
if(!x2)
return x1;
if(l==r){
t[x1].mx+=t[x2].mx;
t[x1].id=l;
return x1;
}
int mid=(l+r-1)/2;
merge(t[x1].l,t[x2].l,l,mid);
merge(t[x1].r,t[x2].r,mid+1,r);
pushup(x1);
return x1;
}
void dfs3(int x,int dad){
for(int i=0;i<e[x].size();i++){
int to=e[x][i];
if(to!=dad){
dfs3(to,x);
rot[x]=merge(rot[x],rot[to],0,inf);
}
}
if(t[rot[x]].mx)
ans[x]=t[rot[x]].id;
}
signed main(){
n=read(),m=read();
for(int i=1;i<n;i++){
int u=read(),v=read();
e[u].push_back(v);
e[v].push_back(u);
}
dfs1(1,-1,0);
dfs2(1,1);
for(int i=1;i<=n;i++)
rot[i]=++tot;
for(int i=1;i<=m;i++){
int u=read(),v=read(),z=read();
update(rot[u],0,inf,z,z,1);
update(rot[v],0,inf,z,z,1);
int x=lca(u,v);
update(rot[x],0,inf,z,z,-1);
if(a[x].dad!=-1)
update(rot[a[x].dad],0,inf,z,z,-1);
}
//for(int i=1;i<=n;i++)
// for(int j=1;j<=10;j++)
// update(rot[i],0,inf,j,j,0);
// for(int i=1;i<=n;i++)
// cout<<
//for(int i=1;i<=n;i++)
// cout<<t[rot[i]].id<<endl;
dfs3(1,-1);
for(int i=1;i<=n;i++)
cout<<ans[i]<<endl;
return 0;
}