#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 10, MAXV = MAXN * 200;
int val[MAXV], cnt[MAXV], rt[MAXN], fa[MAXN][20], deep[MAXN], ls[MAXV], rs[MAXV], idx, n, m;
vector<int> e[MAXN];
int ans[MAXN];
void initlca(int u, int f)
{
fa[u][0] = f;
deep[u] = deep[f] + 1;
for (int i = 1; i <= log2(deep[u]); i++) fa[u][i] = fa[fa[u][i - 1]][i - 1];
for (int v : e[u])
if (v ^ f) initlca(v, u);
}
inline int getlca(int x, int y)
{
if (deep[x] < deep[y]) swap(x, y);
int d = deep[x] - deep[y];
for (int i = 0; i <= log2(d); i++)
if (d & (1 << i)) x = fa[x][i];
if (x == y) return x;
for (int i = log2(deep[x]); i + 1; i--)
if (fa[x][i] != fa[y][i]) x = fa[x][i], y = fa[y][i];
return fa[x][0];
}
inline void pu(int x)
{
if (!cnt[ls[x]] && !cnt[rs[x]]) return;
if (cnt[ls[x]] >= cnt[rs[x]])
cnt[x] = cnt[ls[x]], val[x] = val[ls[x]];
else
cnt[x] = cnt[rs[x]], val[x] = val[rs[x]];
}
void update(int &x, int l, int r, int p, int v)
{
if (!x) x = ++idx;
if (l == p && p == r)
{
cnt[x] += v;
val[x] = p;
return;
}
int mid = (l + r) >> 1;
if (p <= mid)
update(ls[x], l, mid, p, v);
else
update(rs[x], mid + 1, r, p, v);
pu(x);
}
int merge(int x, int y, int l, int r)
{
if (!x || !y) return x | y;
if (l == r)
{
val[x] = l;
cnt[x] += cnt[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);
pu(x);
return x;
}
void calcans(int u)
{
for (int v : e[u])
if (v ^ fa[u][0])
{
calcans(v);
rt[u] = merge(rt[u], rt[v], 1, 1e5);
}
ans[u] = val[rt[u]];
}
int main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cin >> n >> m;
for (int i = 1, u, v; i < n; i++) cin >> u >> v, e[u].push_back(v), e[v].push_back(u);
initlca(1, 0);
while (m--)
{
int x, y, z;
cin >> x >> y >> z;
int lca = getlca(x, y);
update(rt[x], 1, 1e5, z, 1);
update(rt[y], 1, 1e5, z, 1);
update(rt[lca], 1, 1e5, z, -1);
update(rt[fa[lca][0]], 1, 1e5, z, -1);
}
calcans(1);
for (int i = 1; i <= n; i++) cout << ans[i] << "\n";
return 0;
}