#include<bits/stdc++.h>
#define int long long
const int mod = 1e9 + 7;
using namespace std;
bool vis[1005], a[1005], g2[1005][1005];
vector<int> g[1005];
queue<int> q;
int dp[1005], in[1005];
void topsort(int n){
for(int i = 1; i <= n; i++){
if(in[i] == 0){
q.push(i);
dp[i] = 1;
}
}
while(!q.empty()){
int u = q.front();
q.pop();
for(int v: g[u]){
dp[v] = max(dp[v], dp[u] + 1);
if(--in[v] == 0){
q.push(v);
}
}
}
}
signed main()
{
int n, m;
cin >> n >> m;
while(m--){
int s;
cin >> s;
memset(vis, false, sizeof(vis));
for(int i = 1; i <= s; i++){
cin >> a[i];
vis[a[i]] = true;
}
for(int i = a[1]; i <= a[s]; i++){
if(vis[i]){
continue;
}
for(int j = 1; j <= s; j++){
if(g2[i][a[j]]) continue;
g[i].push_back(a[j]);
g2[i][a[j]] = true;
in[a[j]]++;
}
}
}
int maxn = -1e9;
for(int i = 1; i <= n; i++){
maxn = max(maxn, dp[i]);
}
cout << maxn;
return 0;
}