#include <bits/stdc++.h>
using namespace std;
const int mod1 = 998244353, mod = 1e9 + 7;
const int MAXN = 1e5 + 6, MAXM = 2e5 + 5;
const int inf = 2e9;
const long long linf = 1e18;
const long long maxS = 303;
long long n, m;
struct Mat {
  long long a[maxS][maxS];
  Mat() {
    for (long long i = 1; i <= 300; i++) {
      for (long long j = 1; j <= 300; j++) {
        a[i][j] = -inf;
      }
    }
    for (long long i = 1; i <= 300; i++) {
      a[i][i] = 0;
    }
  }
  long long* operator[](long long x) { return a[x]; }
  const long long* operator[](long long x) const { return a[x]; }
  friend Mat operator*(const Mat& a, const Mat& b) {
    Mat r;
    for (long long i = 1; i <= n; i++) {
      for (long long j = 1; j < n; j++) {
        for (long long k = 1; k <= n; k++) {
          r[i][j] = max(r[i][j], a[i][k] + b[k][j]);
        }
      }
    }
    return r;
  }
  bool check() {
    for (long long i = 1; i <= n; i++) {
      if (a[i][i] > 0) return 1;
    }
    return 0;
  }
} ff[10];
void Solve() {
  cin >> n >> m;
  for (long long i = 1, u, v, w, t; i <= m; i++) {
    cin >> u >> v >> w >> t;
    ff[0][u][v] = w;
    ff[0][v][u] = t;
  }
  for (long long i = 1; i < 10; i++) ff[i] = ff[i - 1] * ff[i - 1];
  if (!ff[9].check()) {
    cout << 0;
    return;
  }
  Mat cur;
  long long res = 0;
  for (long long i = 9; i >= 0; i--) {
    Mat nxt = cur * ff[i];
    if (nxt.check()) {
      continue;
    } else {
      cur = nxt;
      res += (1 << i);
    }
  }
  res++;
  cout << res;
}
signed main() {
  if (fopen(""
            ".inp",
            "r")) {
    freopen(
        ""
        ".inp",
        "r", stdin);
    freopen(
        ""
        ".out",
        "w", stdout);
  };
  std::ios::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  ;
  long long TC = 1;
  while (TC--) Solve();
  return 0;
}
