#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll s[1005], o[1005], in[1005], dp[1005], d[1005];
vector<ll> v[1005];
int main(){
ll n, m;
cin >> n >> m;
for(ll i=1;i<=m;i++){
ll k;
cin >> s[i];
// memset(m, 0, sizeof(m));
for(ll j=1;j<=s[i];j++){
cin >> d[i];
}
ll idx=1;
for(ll j=1;j<=n;j++){
if(j!=d[idx]){
idx++;
v[i].push_back(j);
in[j]++;
o[i]++;
}
else{
v[j].push_back(i);
in[i]++;
o[j]++;
}
}
}
queue<ll> q;
for(ll i=1;i<=n;i++){
if(in[i]==0){
dp[i]=1;
q.push(i);
}
}
while(!q.empty()){
ll u=q.front();
q.pop();
for(ll k:v[u]){
in[k]--;
dp[k]=max(dp[u]+1,dp[k]);
if(in[k]==0) q.push(k);
} // 不用vis数组!!!!
}
ll ans=0;
for(ll i=1;i<=n;i++){
if(o[i]==0){
ans=max(dp[i], ans);
}
}
cout << ans/2+1;
}


WA0分,救救我!!
