#include<bits/stdc++.h>
using namespace std;
#define int long long
const int MIN=-1e18;
int n,m;
int a[1005][1005],f[1005][1005][2];
int Max(int a,int b,int c)
{
return max(max(a,b),c);
}
int dfs(int x,int y,int from)
{
if(x<=0||y<=0||x>n||y>m) return MIN;
if(f[x][y][from]!=MIN) return f[x][y][from];
if(from==0) f[x][y][from]=Max(dfs(x-1,y,1),dfs(x,y-1,1),dfs(x,y,1))+a[x][y];
else f[x][y][from]=Max(dfs(x-1,y,1),dfs(x,y-1,0),dfs(x,y,1))+a[x][y];
return f[x][y][from];
}
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>a[i][j];
f[i][j][0]=f[i][j][1]=MIN;
}
}
f[1][1][0]=f[1][1][1]=a[1][1];
cout<<dfs(n,m,1)<<endl;
return 0;
}