#include<bits/stdc++.h>
using namespace std;
const int N=1e3+10;
int n,m,G[N][N];
int f[N],up[N],down[N];
int main()
{
memset(G,-0x3f,sizeof(G));
cin >> n >> m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin >> G[i][j];
}
}
f[1]=G[1][1];
for(int i=2;i<=n;i++)
{
f[i]=f[i-1]+G[i][1];
}
for(int j=2;j<m;j++)
{
memset(down,0,sizeof(down));
memset(up,0,sizeof(up));
down[1]=f[1]+G[1][j];
up[n]=f[n]+G[n][j];
for(int i=2;i<=n;i++)
{
down[i]=max(f[i],down[i-1])+G[i][j];
}
for(int i=n-1;i>=1;i--)
{
up[i]=max(f[i],up[i+1])+G[i][j];
}
for(int i=1;i<=n;i++)
{
f[i]=max(down[i],up[i]);
}
}
f[1]+=G[1][m];
for(int i=2;i<=n;i++)
{
f[i]=max(f[i]+G[i][m],f[i-1]+G[i][m]);
}
cout << f[n] << endl;
return 0;
}