#include <bits/stdc++.h>
using namespace std;
int n,m,asd[1001][1001],qwe[60][60][60][60];
int dfs(int x1,int y1,int x2,int y2){
if(x1==n && y2==m && x2==1 && y2==1)return 0;
if(qwe[x1][y1][x2][y2]!=-1)return qwe[x1][y1][x2][y2];
int sum=0;
if(x1<n && x2>1)sum=max(sum,dfs(x1+1,y1,x2-1,y2)+asd[x1+1][y1]+asd[x2-1][y2]-asd[x1+1][y1]*(x1+1==x2-1 && y1==y2));
if(x1<n && y2>1)sum=max(sum,dfs(x1+1,y1,x2,y2-1)+asd[x1+1][y1]+asd[x2][y2-1]-asd[x1+1][y1]*(x1+1==x2 && y1==y2-1));
if(y1<m && x2>1)sum=max(sum,dfs(x1,y1+1,x2-1,y2)+asd[x1][y1+1]+asd[x2-1][y2]-asd[x1][y1+1]*(x1==x2-1 && y1+1==y2));
if(y1<m && y2>1)sum=max(sum,dfs(x1,y1+1,x2,y2-1)+asd[x1][y1+1]+asd[x2][y2-1]-asd[x1][y1+1]*(x1==x2 && y1+1==y2-1));
qwe[x1][y1][x2][y2]=sum;
return sum;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>asd[i][j];
}
}
memset(qwe,-1,sizeof qwe);
cout<<dfs(1,1,n,m);
return 0;
}