#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int R=85;
const int J=100000000;
int n,m;
int a[R][R],f[R][R][5],result[5];
void init(int row) {
memset(f,0,sizeof(f));
for (int j=1; j<=n; j++) {
f[j][j][1]=2*a[row][j];
}
}
void mul(int tem[],int b,int e,int k) {
int t=0;
for (int i=1; i<=4; i++) {
tem[i]=tem[i]+f[b][e][i]*k+t;
t=tem[i]/J;
tem[i]=tem[i]%J;
}
}
void solve(int row) {
int p,ii;
int tmp1[5],tmp2[5];
init(row);
for (int k=1; k<=n-1; k++) {
for (int i=1; i<=n-k; i++) {
int j=i+k;
memset(tmp1,0,sizeof(tmp1));
tmp1[1]=f[i][i][1];
mul(tmp1,i+1,j,2);
memset(tmp2,0,sizeof(tmp2));
tmp2[1]=f[j][j][1];
mul(tmp2,i,j-1,2);
for (p=4; p>=1; p--) {
if (tmp1[p]!=tmp2[p]) { p=(tmp1[p]>tmp2[p]? 1:2);
break;
}
}
if (p==1) {
for (ii=1; ii<=4; ii++) {
f[i][j][ii]=tmp1[ii];
}
} else {
for (ii=1; ii<=4; ii++) {
f[i][j][ii]=tmp2[ii];
}
}
}
}
}
int main() {
scanf("%d %d",&m,&n);
for (int i=1; i<=m; i++) {
for (int j=1; j<=n; j++) {
scanf("%d", &a[i][j]);
}
}
memset(result,0,sizeof(result));
for (int i=1; i<=m; i++) {
solve(i);
mul(result,1,n,1);
}
int i=4,t;
while (result[i]==0&&i>0) i--; printf("%d",result[i]);
for (int j=i-1; j>=1; j--) {
printf("%8.8d",result[j]); }
return 0;
}