#include <bits/stdc++.h>
const int dx[] = {0, -1, 0, 1, 1, 1, -1, -1};
const int dy[] = {1, 0, -1, 0, 1, -1, 1, -1};
const double PI = acos(-1), EPS = 1e-7;
const int OO = 0x3f3f3f3f, N = 1e7 + 5, mod = 1e9 + 7;
using namespace std;
long long gcd(long long x, long long y) { return (!y) ? x : gcd(y, x % y); }
long long lcm(long long x, long long y) { return ((x / gcd(x, y)) * y); }
void file() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
}
vector<int> in, out;
map<pair<int, int>, bool> vis;
vector<vector<pair<int, int>>> g;
int main() {
  file();
  int n, q;
  cin >> n >> q;
  g = vector<vector<pair<int, int>>>(n + 1);
  priority_queue<pair<int, pair<int, int>>> pr, pr2;
  while (q--) {
    int u, v, d;
    cin >> u >> v >> d;
    g[u].push_back({v, d});
    pr.push({d, {u, v}});
  }
  int st = 1, ed = 1e9, cur = -1, md;
  while (st <= ed) {
    md = st + ed >> 1;
    in = out = vector<int>(n + 1);
    vis.clear();
    pr2 = pr;
    while ((int)pr2.size() && pr2.top().first > md) pr2.pop();
    while ((int)pr2.size()) {
      int d = pr2.top().first;
      int u = pr2.top().second.first;
      int v = pr2.top().second.second;
      pr2.pop();
      in[v]++;
      out[u]++;
    }
    bool ok = 1;
    for (int i = 1; i <= n; i++)
      if (!in[i] || !out[i]) ok = 0;
    if (ok) {
      ed = md - 1;
      cur = md;
    } else
      st = md + 1;
  }
  cout << cur;
}
