#include <fstream.h>
#include <math.h>

ifstream inpf ("input.txt");
ofstream outpf ("output.txt");

int n,m,num;
int a[50][50];
int ctwo[50][50];
int two[251][2];
long int S=-1;
void abc(int& a,int& b,int a0,int b0);




void inpdata()
{
inpf >> n;inpf >> m;

num=0;
for (int i=0;i<n;i++)
for (int j=0;j<m;j++)
	{
	inpf >> a[j][i];
	if (a[j][i]==2)
	{
		two[num][0]=j;
		two[num++][1]=i;
	}
	}

}


int notone(int ap,int b,int t[][50],int& ntwo)
{
	int x1,x2,y1,y2;
	abc(x1,x2,two[ap][0],two[b][0]);
	abc(y1,y2,two[ap][1],two[b][1]);

	for (int i=x1;i<=x2;i++)
	for (int j=y1;j<=y2;j++)
	{

		if (a[i][j]==1) return 0;
		if ((a[i][j]==2)&&(!t[i][j])) {ntwo++;t[i][j]=1;}
	}
return 1;
}

void abc(int& a,int& b,int a0,int b0)
{
	if (a0>b0) {a=b0;b=a0;} else
	{a=a0;b=b0;}
}

/*int sum(int x1,int x2,int y1,int y2)
{
	return 
}*/

void checkalltwo(int a,int b,int c, int d)
{
int res1,res2, t[50][50];
int ntwo=0;
for (int i=0;i<num;i++)
for (int j=0;j<num;j++) t[i][j]=0;
res1=notone(a,b,t,ntwo);
if (res1) res2=notone(c,d,t,ntwo);
if (res2&&(ntwo==num)) {
	int x1,y1,x2,y2,x3,y3,x4,y4;
	abc(x1,x2,two[a][0],two[b][0]);
    abc(y1,y2,two[a][1],two[b][1]);
	abc(x3,x4,two[c][0],two[d][0]);
    abc(y3,y4,two[c][1],two[d][1]);
	abc(x3,x1,x3,x1);
	abc(y3,y1,y3,y1);
	abc(x2,x4,x2,x4);
	abc(y2,y4,y2,y4);

	int s0=(x4-x3)*(y2-y1),s;
	if (s0>=0){
	s=(x1-x2)*(y1-y2)+(x3-x4)*(y3-y4)-s0;
	} else
	{
	s=(x1-x2)*(y1-y2)+(x3-x4)*(y3-y4);
	}
	if ((s<S)||(S=-1)) S=s;
}
}

void pere()
{
	for (int i=0;i<num;i++)
		for (int j=0;j<num;j++)
			for (int k=0;k<num;k++)
				for (int z=0;z<num;z++)
				checkalltwo(i,j,k,z);
}
void outpdata()
{

outpf<<S;

}



int main()
{
inpdata();
if ((n*m==num)) S=num;else
pere();
outpdata();

return 0;
}

