/*
TASK: apple
LANG: C++
*/

#include <cstdio>
#include <cmath>
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

#define MAX 128
#define INF 999666333
#define in cin
#define out cout

using namespace std;

//ifstream(in); ofstream(out);
int n, m;
int a[MAX][MAX];
int dyn[MAX][MAX];


int recurse(int x, int y)
{
int i, c;
int cur, best;

best = 0;

if (dyn[x][y] != -1) return dyn[x][y];
if (x == n-1 && y == m-1) return a[x][y];

if (x < n-1)
   {
   cur = recurse(x+1, y) + a[x][y];
   if (cur > best) best = cur;
   }
if (y < m-1)
   {
   cur = recurse(x, y+1) + a[x][y];
   if (cur > best) best = cur;
   }

dyn[x][y] = best;

return best;
}


int goahead(int x, int y)
{
int i;
int appl, ans, cur, best;

best = 0; appl = a[x][y];
ans = a[x][y]; a[x][y] = 0;

if (x == n-1 && y == m-1) 
   {
   memset(dyn, -1, sizeof(dyn)); 
   ans += recurse(0, 0);
   best = ans;
   }
else
    {
    if (x < n-1) 
       {
       cur = ans + goahead(x+1, y);
       if (cur > best) best = cur;
       }
    
    if (y < m-1) 
       {
       cur = ans + goahead(x, y+1);
       if (cur > best) best = cur;
       }
    }

a[x][y] = appl;

return best;
}


int main(void)
{
int i, c;
int ans;

//in.open("apple.in"); out.open("apple.out");

in >> n >> m;
for (i=0; i<n; i++) for (c=0; c<m; c++) in >> a[i][c];

ans = goahead(0, 0);

out << ans << endl;

return 0;
}
