#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 85;
int n, m;
int w[N][N];
int f[N][N][N][N];
int main()
{
cin >> n >> m;
for (int i = 1; i <= n; i ++ )
for (int j = 1; j <= m; j ++ )
cin >> w[i][j];
for (int len = 1; len <= m; len ++ )
for (int i = 1; i + len - 1 <= m; i ++ )
{
int j = i + len - 1;
for (int x1 = 1; x1 <= n; x1 ++ )
for (int x2 = 1; x2 <= n; x2 ++ )
{
int y1 = len - x1 + 1, y2 = len - x2 + 1;
if (y1 < 1 || y2 < 1 || y1 > m || y2 > m) continue;
int &v = f[i][j][x1][x2];
v = max(v, f[i+1][j][x1][x2] + w[x1][i] + w[x2][j]);
v = max(v, f[i][j-1][x1][x2] + w[x1][j] + w[x2][i]);
if (len == 1) continue;
v = max(v, f[i+1][j-1][x1][x2] + w[x1][i] + w[x1][j] + w[x2][i] + w[x2][j]);
for (int k1 = 1; k1 < x1; k1 ++ )
for (int k2 = 1; k2 < x2; k2 ++ )
{
v = max(v, f[i][j][k1][k2] + f[i+1][j-1][x1-k1][x2-k2] + w[k1][i] + w[k1][j] + w[k2][i] + w[k2][j]);
}
}
}
cout << f[1][m][n][n] << endl;
return 0;
}