#include<iostream>
#include<cstdlib>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<queue>
using namespace std;
int n,m;
int maze[150][150];
int SZ;
const int inf=2147483233;
queue<int> q;
int ns;
bool inq[10100];
int dis[10100];
int spfa()
{
for(int i=0;i<SZ;i++)dis[i]=inf;
q.push(SZ-1);
inq[SZ-1]=1;
dis[SZ-1]=0;
while(!q.empty())
{
int now=q.front();
q.pop();
inq[now]=0;
for(int i=0;i<m;i++)
{
ns=now;
for(int j=0;j<n;j++)
{
if(maze[i][j]==-1)ns=(ns|(1<<j));
if(maze[i][j]==1)ns=(ns&(~(1<<j)));
}
if(dis[ns]>dis[now]+1)
{
dis[ns]=dis[now]+1;
if(!inq[ns]){inq[ns]=1;q.push(ns);}
}
}
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)scanf("%d",&maze[i][j]);
SZ=1<<n;
spfa();
if(dis[0]==inf)printf("-1");
else printf("%d",dis[0]);
}