#include
#include
#include
#include
#include
#include
#include
using namespace std;
int n,m;
int mat[1000][1000];
int dp[1000][1000];
vector > v[1000];
int main(){
ios_base::sync_with_stdio(false);
cin >> n >> m;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> mat[i][j];
}
}
for(int i = 0; i < n - 1; i++) {
for(int j= 0; j < m; j++) {
v[i].push_back(make_pair(mat[i][j] + mat[i + 1][j], j));
}
sort(v[i].begin(), v[i].end());
reverse(v[i].begin(), v[i].end());
}
memset(dp,0,sizeof dp);
dp[0][0] = mat[0][0];
for (int i = 0; i < n-1; i++) {
for (int j = 0; j < m; j++) {
for (int k = 0; k < min(3, m) ; k++) {
if(v[i][k].second != j) {
dp[i + 1][v[i][k].second] = max(dp[i + 1][v[i][k].second], dp[i][j] + v[i][k].first);
}
}
}
}
int res = dp[n-1][m-1];
for(int i = 0; i < m-1; i++) {
if(n == 2 && i == 0){
continue;
}
res = max(res,dp[n-1][i] + mat[n-1][m-1]);
}
cout << res;
}