#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC target("avx,avx2,fma")
#pragma GCC optimization("unroll-loops")
using namespace std;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
const int N = 100001;
const int M = 20;
const int MOD = 998244353;
const int inf = 1234567890;
const long long INF = 1122334455667788990;
int n, m;
int a[N], f[N], d[N];
bool ok(int x) {
  set<int> air, fac;
  for (int i = 1; i <= m; i++)
    if (d[i] <= x) {
      air.insert(a[i]);
      fac.insert(f[i]);
    }
  return (air.size() == n && fac.size() == n);
}
int main() {
  ios_base::sync_with_stdio(false), cin.tie(NULL);
  int tc = 1, cs = 0;
  while (tc--) {
    cin >> n >> m;
    for (int i = 1; i <= m; i++) cin >> a[i] >> f[i] >> d[i];
    int lo = 1, hi = 1000000000, res = -1;
    while (lo <= hi) {
      int m = (lo + hi) / 2;
      if (ok(m))
        res = m, hi = m - 1;
      else
        lo = m + 1;
    }
    cout << res << '\n';
  }
}
