#include <stdio.h>
 
#include <algorithm>
#include <vector>
 
using namespace std;
 
 
int n, m;
int sol[100005], sp[100005], f[100005];
 
 
vector <pair <int, int> > v[100005];
 
inline int cmp (pair <int, int> a, pair <int, int> b)
{
    return a.first < b.first;
}
 
int main ()
{
    freopen ("xorgame.in", "r", stdin);
    freopen ("xorgame.out", "w", stdout);
     
    scanf ("%d %d", &n, &m);
     
    int i, x, y, z;
     
    for (i = 1; i <= m; i ++)
    {
        scanf ("%d %d %d", &x, &y, &z);
        if (y < x)
            x ^= y ^= x ^= y;
        v[y].push_back (make_pair (x, z));
    }
     
    vector <pair <int, int> > :: iterator it1, it2;
     
    for (i = n; i >= 1; i --)
    {
        if (v[i].size() == 0)
        {
            continue;
        }
         
        sort (v[i].begin(), v[i].end(), cmp);
         
        it1 = v[i].begin();
        it2 = it1;
        ++ it2;
        for (; it2 != v[i].end(); it1 ++, it2 ++)
        {
            x = it1 -> second ^ it2 -> second;
            v[it2 -> first - 1].push_back (make_pair (it1 -> first, x));
        }
		while (v[i].size() > 1)
			v[i].pop_back();
		if (v[i].size())
			f[i] = 1;
    }
	for (i = 1; i <= n; i ++)
	{
		if (f[i])
		{
			sol[i] = sp[i - 1] ^ sp[v[i][0].first - 1] ^ v[i][0].second;
		}
		else
			sol[i] = 0;
		sp[i] = sp[i - 1] ^ sol[i];
		printf ("%d ", sol[i]);
	}
    return 0;
}