#include <bits/stdc++.h>
using namespace std;
struct hopcroft_karp {
  vector<vector<int>> G;
  int n;
  vector<int> match, dist;
  hopcroft_karp(int _n = 0) { this->init(_n); }
  void init(int _n) {
    n = _n;
    G.resize(2 * n + 1);
    match.resize(2 * n + 1);
    dist.resize(2 * n + 1);
  }
  void add_edge(int u, int v) {
    G[u].push_back(n + v);
    G[n + v].push_back(u);
  }
  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 run() {
    int matching = 0, i;
    while (bfs())
      for (i = 1; i <= n; i++)
        if (match[i] == 0 && dfs(i)) matching++;
    return matching;
  }
};
struct edge {
  int u, v, w;
};
void solve() {
  int n, m;
  cin >> n >> m;
  vector<edge> vec(m);
  for (edge &x : vec) cin >> x.u >> x.v >> x.w;
  int hi = 1e9;
  int lo = 1;
  int ans = -1;
  while (hi >= lo) {
    int mid = (hi + lo) / 2;
    hopcroft_karp hc;
    hc.init(n + 1);
    for (edge &x : vec)
      if (x.w <= mid) hc.add_edge(x.u, x.v);
    if (hc.run() == n) {
      ans = mid;
      hi = mid - 1;
    } else
      lo = mid + 1;
  }
  cout << ans;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int testcase = 1;
  for (int i = 1; i <= testcase; i++) {
    solve();
  }
  return 0;
}
