#include<bits/stdc++.h>
using namespace std;
int n,m,l,ans[1000001];
vector<int>a[1000001];
struct Edge{
int To,Next;
}e[1000001];
int head[1000001],tot;
int cnt;
struct Node{
int top,f,seg,sum,d;
int hs;
}inf[1000001];
struct Linetree{
int sum,ans;
}lt[10000001];
void add(int x,int y){
e[++tot].Next=head[x];
e[tot].To=y;
head[x]=tot;
return;
}
void dfs1(int t,int f,int dep){
inf[t].f=f;inf[t].sum=1;inf[t].d=dep;
int now=0;
for(int i=head[t];i;i=e[i].Next){
if(e[i].To!=f){
dfs1(e[i].To,t,dep+1);
inf[t].sum+=inf[e[i].To].sum;
if(inf[e[i].To].sum>now){
now=inf[e[i].To].sum;
inf[t].hs=e[i].To;
}
}
}
return;
}
void dfs2(int t,int f,int top){
inf[t].seg=++cnt;inf[t].top=top;
for(int i=head[t];i;i=e[i].Next)
if(e[i].To==inf[t].hs) dfs2(e[i].To,t,top);
for(int i=head[t];i;i=e[i].Next)
if(e[i].To!=f&&e[i].To!=inf[t].hs)
dfs2(e[i].To,t,e[i].To);
return;
}
void LCA(int x,int y,int z){
int nowx=inf[x].top;
int nowy=inf[y].top;
if(nowx==nowy){
if(inf[y].seg<inf[x].seg) swap(x,y);
a[inf[x].seg].push_back(z);
a[inf[inf[y].f].seg].push_back(-z);
}
else if(inf[nowx].d>inf[nowy].d){
a[inf[inf[nowx].f].seg].push_back(z);
a[inf[x].seg].push_back(-z);
LCA(inf[nowx].f,y,z);
}
else if(inf[nowx].d<=inf[nowy].d){
a[inf[inf[nowy].f].seg].push_back(z);
a[inf[y].seg].push_back(-z);
LCA(x,inf[nowy].f,z);
}
return;
}
void build(int k,int l,int r){
lt[k].sum=0;
if(l==r){
lt[k].ans=l;
return;
}
int mid=l+r>>1;
build(k<<1,l,mid);
build(k<<1|1,mid+1,r);
return;
}
void ltadd(int k,int l,int r,int x,int s){
if(l>x||r<x) return;
if(l==r&&l==x){
lt[k].sum+=s;
return;
}
int mid=l+r>>1;
ltadd(k<<1,l,mid,x,s);
ltadd(k<<1|1,mid+1,r,x,s);
if(lt[k<<1|1].sum>lt[k<<1].sum){
lt[k].sum=lt[k<<1|1].sum;
lt[k].ans=lt[k<<1|1].ans;
}
else{
lt[k].sum=lt[k<<1].sum;
lt[k].ans=lt[k<<1].ans;
}
cout<<k<<" "<<l<<" "<<r<<" "<<lt[k].sum<<" "<<lt[k].ans<<endl;
return;
}
int main(){
scanf("%d %d",&n,&m);
for(int i=1;i<n;i++){
int u,v;
scanf("%d %d",&u,&v);
add(u,v);
add(v,u);
}
dfs1(1,0,1);
dfs2(1,0,1);
for(int i=1;i<=m;i++){
int x,y,z;
scanf("%d %d %d",&x,&y,&z);
LCA(x,y,z);
l=max(l,z);
}
build(1,0,l);
map<int,int>h;
for(int i=1;i<=n;i++)
h[inf[i].seg]=i;
cout<<endl;
cout<<endl;
for(int i=1;i<=n;i++){
for(auto j:a[i]){
int s=1;
if(j<0) s=-1;
j=abs(j);
cout<<h[i]<<endl;
ltadd(1,0,l,j,s);
cout<<lt[1].ans<<endl;
system("pause");
}
ans[i]=lt[1].ans;
}
for(int i=1;i<=n;i++){
printf("%d\n",ans[inf[i].seg]);
}
return 0;
}