#include<stdio.h>
#include<string.h>
char a[105][105],b[105][105];
int cc,ff,n,m;
void dfs(int x,int y){
if(x<0||y<0||x>=n||y>=m) return;
if(a[x][y]==‘0‘||b[x][y]==1) return;
if(a[x][y]==‘1‘){
b[x][y]=1;
dfs(x+1,y);
dfs(x,y+1);
dfs(x-1,y);
dfs(x,y-1);
}
}
void dfss(int x,int y){
if(x<0||y<0||x>=n||y>=m){
ff=1;
return;
}
if(a[x][y]==‘1‘||b[x][y]==1) return;
if(a[x][y]==‘0‘){
b[x][y]=1;
dfss(x+1,y);
dfss(x,y+1);
dfss(x-1,y);
dfss(x,y-1);
}
}
int main()
{
int c1,c2,co,f,i,j;
while(~scanf("%d%d",&n,&m)){
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for(i=0;i<n;i++){
getchar();
scanf("%s",a[i]);
}
c1=0;c2=0;f=0;cc=0;co=0;
for(i=0;i<n;i++){
for(j=0;j<m;j++){
if(a[i][j]==‘1‘&&b[i][j]==0){
co=1;
if(c1==0){
c1=1;
dfs(i,j);
}
else{
f=1;
break;
}
}
if(a[i][j]==‘0‘&&b[i][j]==0){
ff=0;
dfss(i,j);
if(ff==0){
if(c2==0) c2=1;
else{
f=1;
break;
}
}
}
}
if(f==1) break;
}
if(f==1||co==0) printf("-1\n");
else if(c2==1) printf("0\n");
else if(c2==0) printf("1\n");
}
return 0;
}