/*
TASK:apple
LANG:C
*/
#include <stdio.h>
#define MAXMN 72
#define max(a, b) (a>b?a:b)
int counted[MAXMN][MAXMN][MAXMN][MAXMN];
int table [MAXMN][MAXMN];
int M, N;

main()
{
    int i, y, j, k;
    scanf("%d %d", &M, &N);
    for(i=0; i<M; i++)
        for(y=0; y<N; y++)
            for(j=0; j<M; j++)
                for(k=0; k<N; k++)
                    counted[i][y][j][k]=-1;
    
    for(i=0; i<M; i++)
        for(y=0; y<N; y++)
            scanf("%d", &table[i][y]);
      //granica
    counted[M-1][N-1][M-1][N-1] = table [M-1][N-1];
    printf("%d\n", count(0, 0, 0, 0));
    return 0;
}

int count(int r1, int c1, int r2, int c2)
{
    int a, b, c, d;
    if(r1>=M || c1>=N || r2>=M || c2>=N)
        return 0;
    if(counted[r1][c1][r2][c2]!=-1)
        return counted[r1][c1][r2][c2];
    a = count(r1+1, c1, r2+1, c2) + 
        (r1==r2&&c1==c2?table[r1][c1]:table[r1][c1]+table[r2][c2]);
    b = count(r1, c1+1, r2+1, c2) + 
        (r1==r2&&c1==c2?table[r1][c1]:table[r1][c1]+table[r2][c2]);
    c = count(r1+1, c1, r2, c2+1) + 
        (r1==r2&&c1==c2?table[r1][c1]:table[r1][c1]+table[r2][c2]);
    d = count(r1, c1+1, r2, c2+1) + 
        (r1==r2&&c1==c2?table[r1][c1]:table[r1][c1]+table[r2][c2]);
    counted[r1][c1][r2][c2] = max(a, max(b, max(c, d)));
    return counted[r1][c1][r2][c2];
}
    
