#include<cstdio>
#include<cstring>
const int N = 110;
int pre[N],vis[N],match[N][N];
int n,m;
int dfs(int x)
{
for(int i=1;i<=m;i++)
{
if(!vis[i]&&match[x][i])
{
vis[i]=1;
if(pre[i]==-1||dfs(pre[i]))
{
pre[i]=x;
return 1;
}
}
}
return 0;
}
int Maxmatch()
{
memset(pre,-1,sizeof pre);
int ans=0;
for(int i=1;i<=n;i++)
{
memset(vis,0,sizeof vis);
ans+=dfs(i);
}
return ans;
}
int main()
{
while(scanf("%d",&n)&&n)
{
scanf("%d",&m);
memset(match,0,sizeof match);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&match[i][j]);
printf("%d\n",Maxmatch());
}
return 0;
}