#include <bits/stdc++.h>
using namespace std;
int n,m;
int vis_ans = 0;
struct point{
string v;
int vs;
int step;
};
string vis = "";
int a[110][15];
int bfs(){
queue<point> qu;
qu.push({vis,vis_ans,0});
while(!qu.empty()){
point now_n = qu.front();
qu.pop();
if (now_n.vs == 0) return now_n.step;
now_n.step+=1;
for (int i=0;i<m;i++){
point now = now_n;
for (int j=0;j<n;j++){
if (now.v[j]=='1'&&a[i][j]==1)now.v[j]='0',now.vs--;
if (now.v[j]=='0'&&a[i][j]==-1) now.v[j]='1',now.vs++;
}
qu.push(now);
}
}
return -1;
}
int main(){
cin>>n>>m;
for (int i = 0;i<m;i++){
for (int j = 0;j<n;j++){
if (i == 0) vis+="1",vis_ans++;
cin>>a[i][j];
}
}
cout<<bfs();
return 0;
}