#include <bits/stdc++.h>
using namespace std;
const int maxn = 1003;
int n, k;
int pos[5][maxn];
int dp[maxn];
bool vis[maxn];
vector<int> v[maxn];
int dfs(int cur) {
  if (vis[cur]) return dp[cur];
  vis[cur] = true;
  for (int i = 0; i < v[cur].size(); i++) {
    int nxt = v[cur][i];
    dp[cur] = max(dp[cur], 1 + dfs(nxt));
  }
  return dp[cur];
}
int main() {
  cin >> n >> k;
  for (__typeof(k) i = 0; i < (k); i++) {
    for (__typeof(n) j = 0; j < (n); j++) {
      int x;
      cin >> x;
      pos[i][--x] = j;
    }
  }
  for (__typeof(n) i = 0; i < (n); i++) {
    for (__typeof(n) j = 0; j < (n); j++) {
      bool flag = 1;
      for (__typeof(k) a = 0; a < (k); a++) {
        if (pos[a][i] <= pos[a][j]) {
          flag = 0;
          break;
        }
      }
      if (flag) v[i].push_back(j);
    }
  }
  for (__typeof(n) i = 0; i < (n); i++) dfs(i);
  cout << *max_element(dp, dp + n) + 1;
}
