#include <algorithm>
#include <iostream>
#include <queue>
#include <vector>
using namespace std;

const int INF = 1 << 30;
const int MAX_N = 100100;

typedef pair<int, int> Rule;

int N, M;
vector<Rule> rules[MAX_N];
int val[MAX_N];
int fin[MAX_N];
int pval[MAX_N];

int main() {
  cin >> N >> M;
  for (int i = 1, a, b, c; i <= M; i += 1) {
    cin >> a >> b >> c;
    rules[a].push_back(make_pair(b, c));
  }

  for (int i = 1; i <= N; i += 1) { 
    if (rules[i].empty()) continue;
    sort(rules[i].begin(), rules[i].end(), greater<Rule>());
    
    Rule last = rules[i].back();
    rules[i].pop_back();

    val[i] = last.second;
    fin[i] = last.first;

    while (!rules[i].empty()) {
      Rule now = rules[i].back();
      rules[i].pop_back();
    
      if (now.first != last.first) {
        rules[last.first + 1].push_back(Rule(now.first, now.second ^ last.second));
        last = now;
      }
    }
  }


  for (int i = N; i > 0; i -= 1) {
    if (fin[i] == 0) {
      pval[i] = pval[i + 1];
      continue;
    }
    int x = pval[i + 1] ^ pval[fin[i] + 1];
    val[i] = val[i] ^ x;
    pval[i] = pval[i + 1] ^ val[i];
  }

  for (int i = 1; i <= N; i += 1) {
    cout << val[i] << ' ';
  }

  return 0;
}