#include<bits/stdc++.h>
using namespace std;
#define rep(i,l,r) for(int i=(l);i<=(r);++i)
#define pre(i,l,r) for(int i=(l);i>=(r);--i)
const int N=1e5+5;
const int M=N*50;
int res[M],sum[M],cnt=0,dep[N],fa[N][20],ans[N],rt[N];
int ls[M],rs[M],n,m;
vector<int> e[N];
void upd(int x){
if(sum[ls[x]]<sum[rs[x]]){
res[x]=res[rs[x]];
sum[x]=sum[rs[x]];
}else{
res[x]=res[ls[x]];
sum[x]=sum[ls[x]];
}
}
int merge(int u,int v,int l,int r){
if(!u) return v;
if(!v) return u;
if(u==v){
sum[u]+=sum[v];
return u;
}
int mid=(l+r)>>1;
ls[u]=merge(ls[u],ls[v],l,mid);
rs[u]=merge(rs[u],rs[v],mid+1,r);
upd(u);
return u;
}
int add(int u,int l,int r,int col,int vl){
if(!u) u=++cnt;
if(l==r){
sum[u]+=vl;
res[u]=col;
return u;
}
int mid=(l+r)>>1;
if(col<=mid){
ls[u]=add(ls[u],l,mid,col,vl);
}else{
rs[u]=add(rs[u],mid+1,r,col,vl);
}
upd(u);
return u;
}
void dfs(int u,int f){
fa[u][0]=f;dep[u]=dep[f]+1;
for(auto it:e[u]){
if(it!=f){
dfs(it,u);
}
}
}
void init(){
rep(j,1,19){
rep(i,1,n){
fa[i][j]=fa[fa[i][j-1]][j-1];
}
}
}
int lca(int u,int v){
if(dep[u]<dep[v]) swap(u,v);
pre(i,19,0){
if(dep[u]-(1<<i)>=dep[v]){
u=fa[u][i];
}
}
if(u==v) return u;
pre(i,19,0){
if(fa[u][i]!=fa[v][i]){
u=fa[u][i];v=fa[v][i];
}
}
return fa[u][0];
}
void calc(int u){
for(auto it:e[u]){
if(it!=fa[u][0]){
calc(it);
rt[u]=merge(rt[u],rt[it],1,100000);
}
}
ans[u]=res[rt[u]];
cout<<rt[u]<<' '<<res[rt[u]]<<'\n';
if(!sum[rt[u]]) ans[u]=0;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
cin>>n>>m;
rep(i,1,n-1){
int u,v;
cin>>u>>v;
e[u].push_back(v);
e[v].push_back(u);
}
dfs(1,0);init();
rep(i,1,m){
int x,y,z,k=0;
cin>>x>>y>>z;
k=lca(x,y);
rt[x]=add(rt[x],1,100000,z,1);
rt[y]=add(rt[y],1,100000,z,1);
rt[k]=add(rt[k],1,100000,z,-1);
rt[fa[k][0]]=add(rt[fa[k][0]],1,100000,z,-1);
}
calc(1);
rep(i,1,n) cout<<ans[i]<<'\n';
return 0;
}