#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <cmath>
#include <vector>
#include <string>
#include <map>
#include <set>

#define foreach(it,v) for (__typeof((v).begin()) it = (v).begin(); it != (v).end(); it++)

using namespace std;

typedef pair<int, int> PII;

vector<int> E[100010];
int size[100010];
int   fa[100010];
int  son[100010];
int deep[100010];
int mark[100010];
int  top[100010];
int cnt, root, tot;
int  num[100010];
int  rev[100010];
int  ans[100010];

void dfs(int u)
{
	size[u] = 1;
	son[u] = 0;
	for (int i = 0; i < E[u].size(); i++) {
		int v = E[u][i];
		if (v == fa[u]) continue;
		fa[v] = u;
		deep[v] = deep[u] + 1;
		dfs(v);
		if (size[v] > size[son[u]]) son[u] = v;
		size[u] += size[v];
	}
}

void build(int u, int Top)
{
	mark[u] = ++cnt;
	rev[mark[u]] = u;
	top[u] = Top;
	if (son[u]) build(son[u], Top);
	for (int i = 0; i < E[u].size(); i++) {
		int v = E[u][i];
		if (v != son[u] && v != fa[u]) build(v, v);
	}
}

vector<PII> U[100010];

void find(int u, int v, int z)
{
	int f1 = top[u];
	int f2 = top[v];
	while (f1 != f2) {
		if (deep[f1] < deep[f2]) {
			swap(f1, f2);
			swap(u, v);
		}
	//	cout << mark[f1] << ' ' << mark[u] << endl;
		U[mark[f1]].push_back(PII(1, z));
		U[mark[u] + 1].push_back(PII(-1, z));
		u = fa[f1];
		f1 = top[u];
	}
	if (deep[u] > deep[v]) swap(u, v);
	//cout << mark[u] << ' ' << mark[v] << endl;
	U[mark[u]].push_back(PII(1, z));
	U[mark[v] + 1].push_back(PII(-1, z));
}


int main()
{
	int n, m;
	while (scanf("%d%d", &n, &m) != EOF) {
		if (!n && !m) break;
		for (int i = 1; i <= n; i++) {
			E[i].clear();
			U[i].clear();
		}
		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);
		}
		root = 1;
		cnt = fa[root] = deep[root] = 0;
        dfs(root);
        build(root, root);		
		for (int i = 0; i < m; i++) {
			int x, y, z;
			scanf("%d%d%d", &x, &y, &z);
			find(x, y, z);
		}
		set<PII> now;
		memset(num, 0, sizeof(num));
		memset(ans, 0, sizeof(ans));
		for (int i = 1; i <= n; i++) {
			foreach(it, U[i]) {
				int add = it->first;
				int col = it->second;
				//printf("%d %d %d\n", i, add, col);
				set<PII> :: iterator tt = now.find(PII(num[col], -col));
				if (tt != now.end()) now.erase(tt);
				num[col] += add;
				if (num[col] != 0) now.insert(PII(num[col], -col));
			}
			if (now.empty()) {
				ans[rev[i]] = 0;
			}
			else {
				ans[rev[i]] = -now.rbegin()->second;
			}
		}
		for (int i = 1; i <= n; i++) printf("%d\n", ans[i]);
	}
	return 0;
}

