#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1e9 + 7;
const int INF = 0x3f3f3f3f;
const int MAXN = 1010;
int n, k;
int a[MAXN];
int cnt[MAXN][MAXN];
vector<int> G[MAXN];
int dp[MAXN];
int main() {
  ios::sync_with_stdio(false), cin.tie(0);
  cin >> n >> k;
  for (int i = 0; i < k; i++) {
    for (int j = 0; j < n; j++) cin >> a[j];
    for (int p = 0; p < n; p++)
      for (int q = p + 1; q < n; q++) cnt[a[p]][a[q]]++;
  }
  for (int i = 1; i < n + 1; i++)
    for (int j = 1; j < n + 1; j++)
      if (cnt[i][j] == k) G[j].push_back(i);
  queue<int> que;
  for (int i = 1; i < n + 1; i++)
    if (!G[i].empty()) que.push(i);
  while (!que.empty()) {
    int u = que.front();
    que.pop();
    for (int i = 0; i < G[u].size(); i++) {
      int v = G[u][i];
      if (dp[v] < dp[u] + 1) {
        dp[v] = dp[u] + 1;
        que.push(v);
      }
    }
  }
  int ans = 0;
  for (int i = 1; i < n + 1; i++) ans = max(ans, dp[i]);
  cout << ans + 1 << endl;
  return 0;
}
