#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;
}