#include <bits/stdc++.h>
using namespace std;
class BipGraph {
  int m, n;
  list<int> *adj;
  int *pairU, *pairV, *dist;

 public:
  BipGraph(int m, int n);
  void addEdge(int u, int v);
  bool bfs();
  bool dfs(int u);
  int hopcroftKarp();
};
int BipGraph::hopcroftKarp() {
  pairU = new int[m + 1];
  pairV = new int[n + 1];
  dist = new int[m + 1];
  for (int u = 0; u <= m; u++) pairU[u] = 0;
  for (int v = 0; v <= n; v++) pairV[v] = 0;
  int result = 0;
  while (bfs()) {
    for (int u = 1; u <= m; u++)
      if (pairU[u] == 0 && dfs(u)) result++;
  }
  return result;
}
bool BipGraph::bfs() {
  queue<int> Q;
  for (int u = 1; u <= m; u++) {
    if (pairU[u] == 0) {
      dist[u] = 0;
      Q.push(u);
    } else
      dist[u] = INT_MAX;
  }
  dist[0] = INT_MAX;
  while (!Q.empty()) {
    int u = Q.front();
    Q.pop();
    if (dist[u] < dist[0]) {
      list<int>::iterator i;
      for (i = adj[u].begin(); i != adj[u].end(); ++i) {
        int v = *i;
        if (dist[pairV[v]] == INT_MAX) {
          dist[pairV[v]] = dist[u] + 1;
          Q.push(pairV[v]);
        }
      }
    }
  }
  return (dist[0] != INT_MAX);
}
bool BipGraph::dfs(int u) {
  if (u != 0) {
    list<int>::iterator i;
    for (i = adj[u].begin(); i != adj[u].end(); ++i) {
      int v = *i;
      if (dist[pairV[v]] == dist[u] + 1) {
        if (dfs(pairV[v]) == true) {
          pairV[v] = u;
          pairU[u] = v;
          return true;
        }
      }
    }
    dist[u] = INT_MAX;
    return false;
  }
  return true;
}
BipGraph::BipGraph(int m, int n) {
  this->m = m;
  this->n = n;
  adj = new list<int>[m + 1];
}
void BipGraph::addEdge(int u, int v) { adj[u].push_back(v); }
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int n, m, i, k, ma = -1;
  cin >> n >> m;
  vector<pair<int, pair<int, int> > > v(m);
  for (i = 0; i < m; i++) {
    cin >> v[i].second.first >> v[i].second.second >> v[i].first;
    ma = max(ma, v[i].first);
  }
  sort(v.begin(), v.end());
  int lo = 0, hi = ma, mid;
  while (lo < hi) {
    mid = (lo + hi) >> 1;
    BipGraph g(n, n);
    for (auto x : v) {
      if (x.first > mid) break;
      g.addEdge(x.second.first, x.second.second);
    }
    k = g.hopcroftKarp();
    if (k >= n)
      hi = mid;
    else
      lo = mid + 1;
  }
  BipGraph g(n, n);
  for (auto x : v) {
    if (x.first > lo) break;
    g.addEdge(x.second.first, x.second.second);
  }
  k = g.hopcroftKarp();
  if (k == n)
    cout << lo << "\n";
  else
    cout << "-1\n";
  return 0;
}
