#include #include #include #include #include #include #define LL long long using namespace std; const int maxn = 1000+10; int a[maxn][maxn]; int dp[maxn][maxn]; int main() { int n,m; while(scanf("%d%d",&n,&m)!=EOF) { for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) scanf("%d",&a[i][j]); for (int i=0;i<=n;i++) { for (int j=0;j<=m;j++) dp[i][j]=1000000000; } for (int i=1;i<=n;i++) { for (int j=1;j<=m;j++) { if ((i+j) % 2 == 1) { if (i==2 && j==1) { dp[i][j]=a[1][1]*a[2][1]; continue; } if (i==1 && j==2) { dp[i][j]=a[1][1]*a[1][2]; continue; } if (i-2 >0) dp[i][j]=min(dp[i][j],dp[i-2][j]+a[i][j]*a[i-1][j]); if (i-1>0 && j-1>=0) { dp[i][j]=min(dp[i][j],dp[i-1][j-1]+a[i][j]*a[i][j-1]); dp[i][j]=min(dp[i][j],dp[i-1][j-1]+a[i][j]*a[i-1][j]); } if (j-2>0) dp[i][j]=min(dp[i][j],dp[i][j-2]+a[i][j]*a[i][j-1]); } } } printf("%d\n",dp[n][m]); } return 0; }