/*
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("Hello world!\n");
return 0;
}
*/
/*
#include<stdio.h>
int arr[102][102]={};
int visit[102]={};
int n,e=0,front=0,be=0;
int queue[101]={};
void bfs(int node)
{
visit[node]=1;
for(int i=0; i<n; i++)
{
if(arr[node][i]==1&&visit[i]!=1)
{
e++;
queue[be++]=i;
visit[i]=1;
}
}
}
int main()
{
int a,o,p;
scanf("%d",&n);
scanf("%d",&a);
for(int i=0; i<a; i++)
{
scanf("%d %d",&o,&p);
arr[o-1][p-1]=1;
arr[p-1][o-1]=1;
}
queue[be++]=0;
while(front!=be)
{
int x = queue[front++];
bfs(x);
}
printf("%d",e);
}
*/
#include <stdio.h>
int queue[2][1001]={};
int front=-1,rear=0;
int arr[1001][1001]={};
int n,m,d=0;
int x, y;
void enq(int i, int j)
{
queue[0][rear]=i;
queue[1][rear]=j;
rear++;
}
void deq()
{
x = queue[0][front];
y = queue[1][front];
front++;
}
void bfs(int i, int j)
{
for(int i=front+1;i<=rear-1;i++)
{
if(arr[queue[0][i]+1][i]==0)
{
enq(queue[0][i]+1,i)
}
if(arr[queue[0][i]-1][i]==0)
{
enq(queue[0][i]-1,i)
}
if(arr[queue[0][i]][i+1]==0)
{
enq(queue[0][i],i+1)
}
if(arr[queue[0][i]][i-1]==0)
{
enq(queue[0][i],i-1)
}
}
}
int main()
{
int p,e=0;
scanf("%d %d",&n,&m);
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
scanf("%d",&p);
arr[i][j]=p;
if(p==1)
{
e++;
enq(i,j);
}
}
}
if(e==m*n)
{
printf("0");
return 0;
}
else if(e==0)
{
printf("-1");
return 0;
}
while(front!=rear)
{
deq();
bfs(x,y);
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(arr[i][j]==0)
{
printf("-1");
return 0;
}
}
}
printf("%d",e-1);
return 0;
}