#include<bits/stdc++.h>
using namespace std;
const int maxn=2500;
int a[maxn][maxn];
int n,m;
int v[maxn][maxn];
int num1[maxn][maxn][3];
int mon=-2000000;
void num(int x,int y,int money){
money+=a[x][y];
if(x==n&&y==m){
cout<<money<<endl;
mon=max(mon,money);
return ;
}
const int dx[]={0,1,0};
const int dy[]={1,0,-1};
for(int i=0;i<3;i++){
if(!v[x+dx[i]][y+dy[i]]&&x+dx[i]<=n&&y+dy[i]<=m&&x+dx[i]>=1&&y+dy[i]>=1){
if(num1[x+dx[i]][y+dy[i]][money]!=0){
mon=max(mon,num1[x+dx[i]][y+dy[i]][money]);
continue;
}
v[x+dx[i]][y+dy[i]]=1;
num(x+dx[i],y+dy[i],money);
num1[x+dx[i]][y+dy[i]][money]=mon;
v[x+dx[i]][y+dy[i]]=0;
}
}
}
int main(){
memset(v,0,sizeof(v));
memset(num1,0,sizeof(num1));
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
}
}
v[1][1]=1;
num(1,1,0);
cout<<mon<<endl;
return 0;
}