#include <bits/stdc++.h>
using namespace std;
long long MOD = 1000000007;
const long long INF = 1e12;
const long long N = 1e6 + 10;
vector<long long> G[100001];
long long n, m, match[100001], dist[100001];
bool bfs() {
  long long i, u, v, len;
  queue<long long> Q;
  for (i = 1; i <= n; i++) {
    if (match[i] == 0) {
      dist[i] = 0;
      Q.push(i);
    } else
      dist[i] = (1 << 28);
  }
  dist[0] = (1 << 28);
  while (!Q.empty()) {
    u = Q.front();
    Q.pop();
    if (u != 0) {
      len = G[u].size();
      for (i = 0; i < len; i++) {
        v = G[u][i];
        if (dist[match[v]] == (1 << 28)) {
          dist[match[v]] = dist[u] + 1;
          Q.push(match[v]);
        }
      }
    }
  }
  return (dist[0] != (1 << 28));
}
bool dfs(long long u) {
  long long i, v, len;
  if (u != 0) {
    len = G[u].size();
    for (i = 0; i < len; i++) {
      v = G[u][i];
      if (dist[match[v]] == dist[u] + 1) {
        if (dfs(match[v])) {
          match[v] = u;
          match[u] = v;
          return true;
        }
      }
    }
    dist[u] = (1 << 28);
    return false;
  }
  return true;
}
long long hopcroft_karp() {
  long long matching = 0, i;
  while (bfs())
    for (i = 1; i <= n; i++)
      if (match[i] == 0 && dfs(i)) matching++;
  return matching;
}
vector<pair<long long, pair<long long, long long>>> edges;
long long check(long long x) {
  for (long long i = 0; i <= 2 * n + 1; i++) {
    G[i].clear();
    match[i] = 0;
    dist[i] = (1 << 28);
  }
  for (long long i = 0; i < (long long)edges.size() && edges[i].first <= x;
       i++) {
    long long u = edges[i].second.first, v = edges[i].second.second;
    G[u].push_back(v);
    G[v].push_back(u);
  }
  long long res = hopcroft_karp();
  return n == res;
}
void solve() {
  long long V;
  cin >> n >> V;
  m = n;
  for (long long i = 0; i < V; i++) {
    long long d, u, v;
    cin >> u >> v >> d;
    edges.push_back({d, {u, v + n}});
  }
  sort(edges.begin(), edges.end());
  long long l = 1, h = 1e9 + 1;
  long long ans = h;
  while (l <= h) {
    long long mid = (l + h) / 2;
    if (check(mid)) {
      h = mid - 1;
      ans = mid;
    } else {
      l = mid + 1;
    }
  }
  if (ans == 1e9 + 1)
    cout << -1 << '\n';
  else
    cout << ans;
}
signed main() {
  ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  long long t = 1;
  while (t--) {
    solve();
  }
}
