#include<bits/stdc++.h>
using namespace std;
const int N=1005;
int n,m;
int len;
int i,j,k;
int deg[N],stop[N];
bool will[N];
vector<int>G[N];
int toposort(){
int ans=0;
queue<pair<int,int>>q;
for(int i=1;i<=n;i++)
if(!deg[i])
q.push({i,1});
int x,now;
while(!q.empty()){
x=q.front().first;
now=q.front().second;
ans=now;q.pop();
for(auto y:G[x]){
if(!--(deg[y])){
q.push({y,now+1});
}
}
}
return ans;
}
int main(){
cin>>n>>m;
for(i=1;i<=m;i++){
memset(will,0,sizeof(will));
cin>>len>>stop[1];
for(j=2;j<=len;j++){
cin>>stop[j];
for(k=stop[j-1]+1;k<stop[j];k++){
will[k]=1;
}
}
for(j=1;j<=len;j++){
for(k=stop[1]+1;k<stop[len];k++){
if(will[k]){
G[stop[j]].push_back(k);
deg[k]++;
}
}
}
}
cout<<toposort()<<endl;
return 0;
}