#include<bits/stdc++.h>
using namespace std;
int pref[32][32],dp[32][32][32][32];
int sum(int x1, int x2, int y1, int y2){
return pref[x2][y2]+pref[x1-1][y1-1]-pref[x2][y1-1]-pref[x1-1][y2];
}
int main(){
int n,m; cin >> n >> m;
memset(pref,0,32*32); memset(dp,0,32*32*32*32);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin >> pref[i][j];
pref[i][j]+=pref[i-1][j]+pref[i][j-1]-pref[i-1][j-1];
}
}
for(int l=2;l<=n+m;l++){
int lx=max(1,l-m);
int ly=l-lx;
while(lx>=1 && lx<=n && ly>=1 && ly<=m){
for(int x1=1;x1+lx-1<=n;x1++){
int x2=x1+lx-1;
for(int y1=1;y1+ly-1<=m;y1++){
int y2=y1+ly-1;
if((n+m-l)%2==0) dp[x1][x2][y1][y2]=max({dp[x1+1][x2][y1][y2]+sum(x1,x1,y1,y2),dp[x1][x2-1][y1][y2]+sum(x2,x2,y1,y2), dp[x1][x2][y1+1][y2]+sum(x1,x2,y1,y1),dp[x1][x2][y1][y2-1]+sum(x1,x2,y2,y2)});
else dp[x1][x2][y1][y2]=min({dp[x1+1][x2][y1][y2],dp[x1][x2-1][y1][y2],dp[x1][x2][y1+1][y2],dp[x1][x2][y1][y2-1]});
}
}
lx++; ly--;
}
}
cout << dp[1][n][1][m];
}