RT
#include<cstdio>
#include<algorithm>
#include<cstdlib>
using namespace std;
int n,m;
long long mat[1010][1010],f[1010][1010][2];
long long dfs(int x,int y,int dir){
if(x<1||x>n||y<1||y>m)
return (long long)(-1e18);
if(f[x][y][dir]!=(long long)(-1e18))
return f[x][y][dir];
if(dir==0)
f[x][y][dir]=max(dfs(x+1,y,0),max(dfs(x,y-1,0),dfs(x,y-1,1)));
else
f[x][y][dir]=max(dfs(x-1,y,1),max(dfs(x,y-1,0),dfs(x,y-1,1)));
return f[x][y][dir]+mat[x][y];
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%lld",&mat[i][j]),
f[i][j][0]=f[i][j][1]=(long long)(-1e18);
f[1][1][0]=f[1][1][1]=mat[1][1];
printf("%lld",dfs(n,m,1));
return 0;
}