#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
const int N=1e5+2;
vector<int> e[N];
int fa[N],son[N],dep[N],siz[N],tops[N],root[N],ans[N];
int ls[N*50],rs[N*50],s[N*50],typ[N*50];
int n,m,idx=0;
void dfs1(int x,int f){
dep[x]=dep[f]+1;
fa[x]=f;
siz[x]=1;
int maxson=-1;
for(auto y:e[x]){
if(y==f) continue;
dfs1(y,x);
siz[x]+=siz[y];
if(maxson<siz[y]) maxson=siz[y],son[x]=y;
}
}
void dfs2(int x,int top){
tops[x]=top;
if(!son[x]) return;
dfs2(son[x],top);
for(auto y:e[x]){
if(y==fa[x]||y==son[x]) continue;
dfs2(y,y);
}
}
int lca(int x,int y){
while(tops[x]!=tops[y]){
if(dep[tops[x]]<=dep[tops[y]]) swap(x,y);
x=fa[tops[x]];
}
return dep[x]<=dep[y]?x:y;
}
void pushup(int p){
if(s[ls[p]]>=s[rs[p]])
s[p]=s[ls[p]],typ[p]=typ[ls[p]];
else s[p]=s[rs[p]],typ[p]=typ[rs[p]];
}
void update(int &p,int x,int y,int u,int t){
if(!p) p=++idx;
if(x==y){s[p]+=t;typ[p]=u;return ;}
int mid=(x+y)>>1;
if(u<=mid) update(ls[p],x,mid,u,t);
else update(rs[p],mid+1,y,u,t);
pushup(p);
}
int merge(int x,int y,int l,int r){
if(!x || !y) return x|y;
if(l==r){s[x]+=s[y];return x;}
int mid=(l+r)>>1;
ls[x]=merge(ls[x],ls[y],l,mid);
rs[x]=merge(rs[x],rs[y],mid+1,r);
pushup(x);
return x;
}
void dfs(int x){
for(auto y:e[x]){
if(y==fa[x]) continue;
dfs(y);
root[x]=merge(root[x],root[y],1,N);
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<n;++i){
int u,v;
scanf("%d%d",&u,&v);
e[u].push_back(v);
e[v].push_back(u);
}
dfs1(1,0);
dfs2(1,1);
while(m--){
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
update(root[x],1,N,z,1);
update(root[y],1,N,z,1);
int t=lca(x,y);
printf("%d\n",t);
update(root[t],1,N,z,-1);
update(root[fa[t]],1,N,z,-1);
}
for(int i=1;i<=n;++i) printf("%d\n",s[root[i]]>0?typ[root[i]]:0);
}