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

#include <cstdio>

using namespace std;

const int MAXN  = 71;

int M[MAXN][MAXN];
int d[MAXN][MAXN];
int used[MAXN][MAXN];
int n, m;
int ans;

inline int max(int a, int b) {
    return a>b ? a : b;
}

void backtrack(int y, int x) {
    used[y][x] = 1;
    if( y == 0 && x == 0 ) return ;
    if( x > 0 )
        if( y > 0 )
            if( d[y-1][x] > d[y][x-1] )
                backtrack(y-1, x);
            else    
                backtrack(y, x-1);            
        else
            backtrack(y, x-1);        
    else
        backtrack(y-1, x);
}

void solve() {
    if( !used[0][0] ) 
        d[0][0] = M[0][0];
    else d[0][0] = 0;

    for(int i = 1; i < m; ++i) {
        d[0][i] = d[0][i-1];
        if( !used[0][i] ) d[0][i] += M[0][i];
    }

    for(int i = 1; i < n; ++i) {
        d[i][0] = d[i-1][0];
        if( !used[i][0] ) d[i][0] += M[i][0];
    }

    for(int i = 1; i < n; ++i)
     for(int j = 1; j < m; ++j) {
      d[i][j] = max( d[i-1][j], d[i][j-1] );
      if( !used[i][j] ) d[i][j] += M[i][j];
     }
}

int main() {

    scanf("%d %d", &n, &m);
    for(int i = 0; i < n; ++i)  
     for(int j = 0; j < m; ++j)
      scanf("%d", &M[i][j]);

    solve(); ans += d[n-1][m-1];
    backtrack(n-1, m-1);
    solve(); ans += d[n-1][m-1];
    printf("%d\n", ans);

    return 0;
}
