#include <bits/stdc++.h>
using namespace std;
long long input() {
  long long x;
  cin >> x;
  return x;
}
const long long N = 1e4 + 20, MOD = 1e9 + 7;
const long long MAX = LONG_LONG_MAX, MIN = LONG_LONG_MIN;
long long a[6][N], dp[N];
bool checked[N];
vector<long long> e[N];
long long path(long long v) {
  if (checked[v]) return dp[v];
  dp[v] = 1;
  for (long long i = 0; i < e[v].size(); i++)
    dp[v] = max(dp[v], path(e[v][i]) + 1);
  checked[v] = true;
  return dp[v];
}
int32_t main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  long long n, l;
  cin >> n >> l;
  for (long long i = 1; i < l + 1; i++)
    for (long long j = 1; j < n + 1; j++) a[i][input()] = j;
  for (long long i = 1; i < n + 1; i++) {
    for (long long j = i + 1; j < n + 1; j++) {
      bool itoj, jtoi;
      itoj = jtoi = true;
      for (long long k = 1; k < l + 1; k++) {
        if (a[k][i] > a[k][j]) itoj = false;
        if (a[k][i] < a[k][j]) jtoi = false;
      }
      if (jtoi) e[i].push_back(j);
      if (itoj) e[j].push_back(i);
    }
  }
  long long mx = MIN;
  for (long long i = 1; i < n + 1; i++) mx = max(mx, path(i));
  cout << mx << "\n";
  return 0;
}
