#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=12;
const int M=102;
const int INF=1e18;
int a[M][N],n,m,dp[(1<<N)],digit[N],nxt[N];
signed main(){
cin>>n>>m;
for(int i=1;i<(1<<n);i++){
dp[i]=INF;
}
dp[0]=0;
for(int i=1;i<=m;i++){
int sum=0;
for(int j=1;j<=n;j++){
cin>>a[i][j];
if(a[i][j]==-1){
dp[(1<<(n-j))]=1ll;
}
}
}
for(int i=0;i<(1<<n);i++){
int tmp=i,tot=0;
while(tmp){
digit[++tot]=tmp%2;
tmp>>=1;
}
for(int j=1;j<=m;j++){
for(int k=n;k>=1;k--)nxt[k]=digit[n-k+1];
for(int k=1;k<=n;k++){
if(a[j][k]==1){
if(nxt[k]==0){
nxt[k]=1;
}
}
else if(a[j][k]==-1){
if(nxt[k]==1){
nxt[k]=0;
}
}
}
int sum=0;
for(int k=1;k<=n;k++){
sum=(sum<<1)+nxt[k];
}
dp[i]=min(dp[i],dp[sum]+1);
dp[sum]=min(dp[sum],dp[i]+1);
}
for(int i=1;i<=tot;i++)digit[i]=0;
}
if(dp[(1<<n)-1]==INF) cout<<-1<<"\n";
else cout<<dp[(1<<n)-1]<<"\n";
return 0;
}