#include <bits/stdc++.h>
using namespace std;
long long n, m;
long long i, ct;
struct edge {
  long long l, r, d;
};
edge e[100009];
long long ct1, ct2;
void dfs(long long x, vector<long long> *a, bool *v) {
  if (v[x]) return;
  if (x <= n)
    ct1++;
  else
    ct2++;
  v[x] = 1;
  for (auto z : a[x]) {
    dfs(z, a, v);
  }
}
bool f(long long mid) {
  i = 0;
  vector<long long> a[20009];
  bool v[20009] = {};
  while (i < m) {
    if (e[i].d <= mid) {
      a[e[i].l].push_back(e[i].r + n);
      a[e[i].r + n].push_back(e[i].l);
    }
    i++;
  }
  i = 1;
  while (i <= n) {
    if (v[i] == 0) {
      ct1 = ct2 = 0;
      dfs(i, a, v);
      if (ct1 == 0 || ct1 != ct2) return 0;
    }
    i++;
  }
  return 1;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  cin >> n >> m;
  long long i = 0, l, r, d;
  while (i < m) {
    cin >> l >> r >> d;
    e[i].l = l;
    e[i].r = r;
    e[i].d = d;
    i++;
  }
  long long st = 0, e = 10000000000, mid, ans = -1;
  while (st <= e) {
    mid = (st + e) / 2;
    if (f(mid)) {
      ans = mid;
      e = mid - 1;
    } else
      st = mid + 1;
  }
  cout << ans << "\n";
}
