#include <bits/stdc++.h>
using namespace std;
long long int par[100005], child[100005];
long long int getParent(long long int a) {
  if (par[a] < 0) {
    return a;
  }
  return par[a] = getParent(par[a]);
}
long long int Union(long long int a, long long int b) {
  a = getParent(a);
  b = getParent(b);
  if (a != b) {
    if (par[a] < par[b]) {
      par[a] += par[b];
      par[b] = a;
    } else {
      par[b] += par[a];
      par[a] = b;
    }
  }
}
void solve() {
  long long int n, m;
  cin >> n >> m;
  vector<pair<long long int, pair<long long int, long long int>>> v(m);
  map<pair<long long int, long long int>, long long int> mp;
  for (long long int i = 0; i < m; i++) {
    cin >> v[i].second.first >> v[i].second.second >> v[i].first;
    mp[{v[i].second.first, v[i].second.second}] = v[i].first;
  }
  for (long long int i = 1; i <= n; i++) {
    par[i] = -1;
    child[i] = -1;
  }
  sort((v).begin(), (v).end());
  long long int ans = 0;
  for (long long int i = 0; i < m; i++) {
    long long int u1 = v[i].second.first;
    long long int v1 = v[i].second.second;
    if (par[u1] == -1 || child[v1] == -1) {
      par[u1] = v1;
      child[v1] = u1;
      ans = max(ans, v[i].first);
    }
  }
  bool ok = true;
  for (long long int i = 1; i <= n; i++) {
    if (child[i] == -1 || par[i] == -1) {
      ok = false;
    }
  }
  cout << (ok == true ? ans : -1) << '\n';
}
int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  long long int t = 1;
  while (t--) {
    solve();
  }
  return 0;
}
