#include<iostream>#include<string.h>#include<stdlib.h>#include<stdio.h>#include<math.h>usingnamespace std;#define MAXN 1111int cx[MAXN][MAXN];bool gra[MAXN][MAXN], vis[MAXN];int n, m, limit;booldfs(int u ){for(int v =0; v < m; v++){if(gra[u][v]&&!vis[v]){
vis[v]=1;if(cx[v][0]< limit){
cx[v][++cx[v][0]]= u;returntrue;}for(int i =1; i <= cx[v][0]; i++)if(dfs(cx[v][i])){
cx[v][i]= u;returntrue;}}}returnfalse;}boolcheck(){int res =0;for(int i =0; i < m; i++)
cx[i][0]=0;for(int i =0; i < n; i++){memset(vis,0,sizeof(vis));if(!dfs(i))returnfalse;}returntrue;}voidsolve(){int l, r;
l =0, r = n;int ans =0;while(l < r){
limit =( l + r )>>1;if(check())
r = limit;else
l = limit +1;}printf("%d\n",r);}intmain(){char str[2100];while(scanf("%d %d",&n,&m)!= EOF &&( n + m)){memset(gra,0,sizeof(gra));getchar();for(int i =0; i < n; i++){gets(str);int len =strlen(str);for(int j =0; j < len; j++){if(str[j]>='0'&& str[j]<='9'){int v =0;while(str[j]>='0'&& str[j]<='9'){
v = v*10+(str[j]-'0');
j++;}
gra[i][v]=1;}}}solve();}return0;}