#include <iostream>
#include <cmath>
#include <iomanip>
#include <map>
#include <climits>
#include <set>
#include <algorithm>
#include <vector>

using namespace std;
const int MOD = 1000000007;


int n, m;
int a[500][500];
bool visited[500][500];

int dx[8] = { -1,-1,-1,0,0,1,1,1 };
int dy[8] = { -1,0,1,-1,1,-1,0,1 };

void dfs(int x, int y) {
	visited[x][y] = true;
	for (int i = 0;i < 8;i++) {
		int nx = x + dx[i];
		int ny = y + dy[i];

		if (nx >= 0 && nx < n && ny >= 0 && ny < m && a[nx][ny] == 1 && !visited[nx][ny]) {
			dfs(nx, ny);
		}
	}
}

int main() {

	cin >> n >> m;
	for (int i = 0;i < n;i++) {
		for (int j = 0;j < m;j++) {
			cin >> a[i][j];
		}
	}
	long long dp[100][100];
	// dp[i][j] là đường đi có tổng lớn nhất từ [1,1] đến [i,j]

	dp[0][0] = a[0][0];
	for (int i = 0;i < n;i++) {
		for (int j = 0;j < m;j++) {
			if (i == 0 && j == 0) continue;
			long long top = (i > 0) ? dp[i - 1][j] : 0;
			long long left = (j > 0) ? dp[i][j - 1] : 0;
			dp[i][j] = a[i][j] + max(top, left);
		}
	}
	cout << dp[n - 1][m - 1];
} 





