#include <bits/stdc++.h>
const int N = 1e4, M = 1e5;
using namespace std;
int n, m, p[N + 5], cnt, q[N + 5];
struct Node {
  int x, y, val;
} a[M + 5];
void read(int &x) {
  x = 0;
  char c = getchar();
  int w = 1;
  for (; c < '0' || c > '9'; c = getchar())
    if (c == '-') w = -1;
  for (; c <= '9' && c >= '0'; c = getchar()) x = x * 10 + c - '0';
  x *= w;
}
bool cmp(Node x, Node y) { return x.val < y.val; }
bool check(int now) {
  memset(p, 0, sizeof(p));
  memset(q, 0, sizeof(q));
  for (int i = 1; i <= now; ++i) {
    p[a[i].x] = 1;
    q[a[i].y] = 1;
  }
  for (int i = 1; i <= n; ++i)
    if (p[i] == 0 || q[i] == 0) return 0;
  return 1;
}
int main() {
  read(n);
  read(m);
  for (int i = 1; i <= m; ++i) {
    read(a[i].x);
    read(a[i].y);
    read(a[i].val);
  }
  sort(a + 1, a + m + 1, cmp);
  int l = 1, r = m, mid;
  while (l <= r) {
    mid = (l + r) / 2;
    if (check(mid))
      r = mid - 1;
    else
      l = mid + 1;
  }
  if (check(m) == 0)
    puts("-1");
  else
    printf("%d", a[r + 1].val);
  return 0;
}
