#include <bits/stdc++.h>
#pragma GCC target("avx2")
#pragma GCC optimization("O3")
#pragma GCC optimization("unroll-loops")
using namespace std;
const int inf = 1e9 + 5;
const long long int inf64 = 1e18 + 5;
vector<int> G[20001];
int n, m, match[20001], dist[20001];
using ppi = pair<int, pair<int, int> >;
void init(int n) {
  for (int i = 0; i <= 2 * n; i++) {
    dist[i] = match[i] = 0;
    G[i].clear();
  }
}
bool bfs() {
  int i, u, v, len;
  queue<int> 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(int u) {
  int 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;
}
int hopcroft_karp() {
  int matching = 0, i;
  while (bfs())
    for (i = 1; i <= n; i++)
      if (match[i] == 0 && dfs(i)) matching++;
  return matching;
}
bool chk(vector<ppi> &ed, int mid) {
  init(n);
  for (ppi p : ed) {
    if (p.first > mid) break;
    G[p.second.first].push_back(p.second.second);
    G[p.second.second].push_back(p.second.first);
  }
  return (hopcroft_karp() == n);
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int i;
  cin >> n >> m;
  vector<ppi> ed;
  for (i = 0; i < m; i++) {
    int a, b, c;
    cin >> a >> b >> c;
    ed.emplace_back(c, make_pair(a, b + n));
  }
  sort(ed.begin(), ed.end());
  int first = 1, l = ed.back().first, mid, ans = inf;
  while (first <= l) {
    mid = (first + l) / 2;
    if (chk(ed, mid)) {
      ans = min(ans, mid);
      l = mid - 1;
    } else
      first = mid + 1;
  }
  cout << (ans == inf ? -1 : ans);
}
