#include<bits/stdc++.h>
using namespace std;
int n,m,ans=0x7f7f7f;
int a[105][15],e[1024][1024],b[1024];
struct edge
{
int num,k;
}t;
queue<edge>q;
void bfs()
{
while(!q.empty()) q.pop();
t.num=1024,t.k=0;
q.push(t);
while(!q.empty())
{
t=q.front();
q.pop();
b[t.num]=1;
if(t.num==0)
{
ans=min(ans,t.k);
continue;
}
for(int i=0;i<=1024;++i)
if(e[t.num][i]==1&&b[i]==0) q.push((edge){i,t.k+1});
}
}
int main()
{
cin>>n>>m;
memset(e,0x7f7f7f7f,sizeof(e));
for(int i=1;i<=n;++i)
{
for(int j=1;j<=m;++j) cin>>a[i][j];
for(int j=1;j<=m;++j)
for(int k=0;k<=1024;++k)
if(a[i][j]==1&&k&(1<<j)==0) e[k+(1<<j)][k]=1;
else if(a[i][j]==-1&&k&(1<<j)==1) e[k][k-(1<<j)]=1;
}
if(ans==0x7f7f7f) cout<<"-1\n";
else cout<<ans<<"\n";
return 0;
}