#include #include #include #include #include #include #include #include #include #include #define scnaf scanf #define cahr char #define bug puts("bugbugbug"); using namespace std; typedef long long ll; const int mod=1000000007; const int maxn=1000+5; const int inf=1e9; int a[maxn][maxn]={0}; ll dp[maxn][maxn]; int main() { int n,m; while(~scanf("%d%d",&n,&m)) { memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++){ scanf("%d",&a[i][j]); } for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { if((i+j)%2) { if(i==1) dp[i][j]=dp[i][j-1]+a[i][j-1]*a[i][j]; else if(j==1) dp[i][j]=dp[i-1][j]+a[i-1][j]*a[i][j]; else dp[i][j]=min(dp[i-1][j]+a[i-1][j]*a[i][j],dp[i][j-1]+a[i][j-1]*a[i][j]); } else{ if(i==1&&j==1) continue; if(i==1) dp[i][j]=dp[i][j-1]; else if(j==1) dp[i][j]=dp[i-1][j]; else dp[i][j]=min(dp[i-1][j],dp[i][j-1]); } } printf("%I64d\n",dp[n][m]); } }