#include<bits/stdc++.h>
using namespace std;
int vis[55][55][55][55];
int mp[55][55];
int m,n;
int find(int x1,int y1,int x2,int y2) {
if(x1==x2 && y1==y2 &&(x1!=m && x2!=n)) return 0;
if(vis[x1][y1][x2][y2]) return vis[x1][y1][x2][y2];
if((x1-1) && (x2-1))vis[x1][y1][x2][y2]=max(vis[x1][y1][x2][y2],find(x1-1,y1,x2-1,y2));
if((y1-1) && (x2-1))vis[x1][y1][x2][y2]=max(vis[x1][y1][x2][y2],find(x1,y1-1,x2-1,y2));
if((x1-1) && (y2-1))vis[x1][y1][x2][y2]=max(vis[x1][y1][x2][y2],find(x1-1,y1,x2,y2-1));
if((y1-1) && (y2-1))vis[x1][y1][x2][y2]=max(vis[x1][y1][x2][y2],find(x1,y1-1,x2,y2-1));
vis[x1][y1][x2][y2]+=(mp[x1][y1]+mp[x2][y2]);
return vis[x1][y1][x2][y2];
}
int main() {
scanf("%d%d",&m,&n);
for(int i=1; i<=n; i++) for(int j=1; j<=m; j++) scanf("%d",&mp[j][i]);
cout<<find(m,n,m,n);
return 0;
}