#include #include #include #include #include #include #include #include #define ls (t<<1) #define rs ((t<<1)+1) #define mid ((l+r)>>1) #define fi first #define se second #define mk make_pair #define N 1005 #define M 200005 #define seed 23333 #define Mo 998244353 using namespace std; int i,j,m,n,p,k,f[N][N],a[N][N]; int main() { while (scanf("%d%d",&n,&m)!=EOF) { for (i=1;i<=n;++i) for (j=1;j<=m;++j) scanf("%d",&a[i][j]); memset(f,60,sizeof(f)); f[1][1]=0; for (i=1;i<=n;++i) for (j=1;j<=m;++j) if (((i+j)&1)==0) { if (i>1) f[i][j]=min(f[i][j],f[i-1][j]); if (j>1) f[i][j]=min(f[i][j],f[i][j-1]); } else { if (i>1) f[i][j]=min(f[i][j],f[i-1][j]+a[i-1][j]*a[i][j]); if (j>1) f[i][j]=min(f[i][j],f[i][j-1]+a[i][j-1]*a[i][j]); } printf("%d\n",f[n][m]); } }