#include<bits/stdc++.h>
using namespace std;
 
const long long MaxN = 1e5 + 5;
 
long long n, q;
long long visited[MaxN], par[MaxN], num[MaxN], dis[MaxN];
vector<long long> a[MaxN];
 
void bfs(long long s)
{
    queue<long long> qu;
    qu.push(s);
    visited[s] = true;
    par[s] = s;
 
    while(!qu.empty())
    {
        long long u = qu.front();
        qu.pop();
 
        for(long long v : a[u])
        {
            if(!visited[v])
            {
                visited[v] = true;
                dis[v] = dis[u] + 1;
                par[v] = u;
                qu.push(v);
            }
        }
    }
}
 
struct QUERY
{
    long long x, y, z;
} query[MaxN];
 
void input()
{
    cin >> n >> q;
 
    for(long long i = 1; i < n; i++)
    {
        long long u, v;
        cin >> u >> v;
        a[u].push_back(v);
        a[v].push_back(u);
    }
 
    for(long long i = 1; i <= q; i++)
    {
        cin >> query[i].x >> query[i].y >> query[i].z;
    }
}
 
void solve()
{
    bfs(1);
 
    for(long long i = 1; i <= q; i++)
    {
        long long x = query[i].x;
        long long y = query[i].y;
        long long z = query[i].z;
 
        vector<long long> vt;
 
        while(dis[y] > dis[x])
        {
            if(num[y] == 0)
                num[y] = z;
 
            vt.push_back(y);
            y = par[y];
        }
 
        if(num[x] == 0)
            num[x] = z;
 
        for(long long u : vt)
            par[u] = par[x];
    }
 
    for(long long i = 1; i <= n; i++)
        cout << num[i] << " ";
}
 
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
 
    input();
    solve();
 
    return 0;
}