#include <bits/stdc++.h>
using namespace std;
class HopcroftKarp {
 public:
  HopcroftKarp(int n1, int n2) : n1(n1), n2(n2) {
    adj.resize(n1 + 1);
    match.assign(n1 + 1, 0);
    matched.assign(n2 + 1, 0);
    dist.resize(n1 + 1);
  }
  void add(int u, int v) { adj[u].push_back(v); }
  int maximalMatching() {
    int matchings = 0;
    while (bfs()) {
      for (int u = 1; u <= n1; u++) {
        if (!match[u]) {
          if (dfs(u)) matchings++;
        }
      }
    }
    return matchings;
  }

 private:
  bool bfs() {
    std::queue<int> q;
    dist[0] = INF;
    for (int u = 1; u <= n1; u++) {
      if (!match[u]) {
        dist[u] = 0;
        q.push(u);
      } else {
        dist[u] = INF;
      }
    }
    while (!q.empty()) {
      int u = q.front();
      q.pop();
      if (dist[u] < dist[0]) {
        for (int v : adj[u]) {
          if (dist[matched[v]] == INF) {
            dist[matched[v]] = dist[u] + 1;
            q.push(matched[v]);
          }
        }
      }
    }
    return dist[0] != INF;
  }
  bool dfs(int u) {
    if (u == 0) return true;
    for (int v : adj[u]) {
      if (dist[matched[v]] == dist[u] + 1) {
        if (dfs(matched[v])) {
          matched[v] = u;
          match[u] = v;
          return true;
        }
      }
    }
    dist[u] = INF;
    return false;
  }
  static const int INF = std::numeric_limits<int>::max();
  int n1, n2;
  std::vector<int> dist;
  std::vector<std::vector<int>> adj;

 public:
  std::vector<int> match, matched;
};
struct edge {
  int u, v, d;
};
int main() {
  int n, m;
  cin >> n >> m;
  vector<edge> a(m);
  for (int i = 0; i < m; i++) {
    cin >> a[i].u >> a[i].v >> a[i].d;
  }
  sort(a.begin(), a.end(), [](edge &p, edge &q) { return p.d < q.d; });
  int l = 0, r = 1e9 + 1;
  while (l + 1 < r) {
    int mid = (l + r) >> 1;
    HopcroftKarp g(n, n);
    for (int i = 0; i < m; i++) {
      if (a[i].d > mid) break;
      g.add(a[i].u, a[i].v);
    }
    if (g.maximalMatching() == n) {
      r = mid;
    } else {
      l = mid;
    }
  }
  if (r > 1e9) {
    cout << -1 << endl;
  } else {
    cout << r << endl;
  }
  return 0;
}
