#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5;
vector<pair<int, int>> G[MAXN + 1];
int vis[MAXN + 1];
int n, m;
long long base[64];
void insert_base(long long x) {
  if (!x) return;
  for (int i = 60; i >= 0; --i) {
    if (x & (1ll << i)) {
      if (base[i])
        x ^= base[i];
      else {
        base[i] = x;
        break;
      }
    }
  }
}
int ts = 1;
long long xors[MAXN + 1];
void dfs(int x) {
  for (auto edge : G[x]) {
    if (vis[edge.first] != 0 && vis[edge.first] <= vis[x]) {
      insert_base(xors[vis[x]] ^ xors[vis[edge.first]] ^ edge.second);
    } else if (vis[edge.first] == 0) {
      vis[edge.first] = ++ts;
      xors[ts] = xors[vis[x]] ^ edge.second;
      dfs(edge.first);
    }
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cin >> n >> m;
  for (int i = 0; i < m; ++i) {
    int a, b, w;
    cin >> a >> b >> w;
    G[a].push_back({b, w});
    G[b].push_back({a, w});
  }
  vis[1] = 1;
  dfs(1);
  long long ans = xors[vis[n]];
  for (int i = 60; i >= 0; --i) {
    if (ans & (1ll << i)) {
      if (base[i]) ans ^= base[i];
    }
  }
  cout << ans << endl;
  return 0;
}
