#include <bits/stdc++.h>
using namespace std;
const long long INF = 4e18;
const int MAXM = 2005;
// Khai báo biến toàn cục (cấp phát bộ nhớ tĩnh 1 lần duy nhất)
long long dp_max[MAXM];
long long dp_min[MAXM];
long long cur_max[MAXM];
long long cur_min[MAXM];
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n, m;
cin >> n >> m;
// Khởi tạo trạng thái ban đầu cho hàng 0 / trước hàng 1
fill(dp_max + 1, dp_max + m + 1, -INF);
fill(dp_min + 1, dp_min + m + 1, INF);
for (int i = 1; i <= n; ++i) {
// Tái sử dụng mảng toàn cục bằng cách reset giá trị ban đầu cho hàng i
fill(cur_max + 1, cur_max + m + 1, -INF);
fill(cur_min + 1, cur_min + m + 1, INF);
for (int j = 1; j <= m; ++j) {
long long val;
cin >> val;
if (i == 1 && j == 1) {
cur_max[1] = val;
cur_min[1] = val;
continue;
}
// Hướng di chuyển XUỐNG DƯỚI (từ ô (i-1, j))
if (i > 1) {
cur_max[j] = max(cur_max[j], dp_max[j] + val);
cur_min[j] = min(cur_min[j], dp_min[j] + val);
}
// Hướng di chuyển SANG PHẢI (từ ô (i, j-1))
if (j > 1) {
cur_max[j] = max(cur_max[j], -cur_min[j - 1] + val);
cur_min[j] = min(cur_min[j], -cur_max[j - 1] + val);
}
}
// Rolling: Copy kết quả hàng hiện tại (cur) sang hàng cũ (dp) để chuẩn bị cho hàng tiếp theo
for (int j = 1; j <= m; ++j) {
dp_max[j] = cur_max[j];
dp_min[j] = cur_min[j];
}
}
cout << dp_max[m] << "\n";
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBsb25nIGxvbmcgSU5GID0gNGUxODsKY29uc3QgaW50IE1BWE0gPSAyMDA1OwoKLy8gS2hhaSBiw6FvIGJp4bq/biB0b8OgbiBj4bulYyAoY+G6pXAgcGjDoXQgYuG7mSBuaOG7myB0xKluaCAxIGzhuqduIGR1eSBuaOG6pXQpCmxvbmcgbG9uZyBkcF9tYXhbTUFYTV07CmxvbmcgbG9uZyBkcF9taW5bTUFYTV07CmxvbmcgbG9uZyBjdXJfbWF4W01BWE1dOwpsb25nIGxvbmcgY3VyX21pbltNQVhNXTsKCmludCBtYWluKCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKE5VTEwpOwoKICAgIGludCBuLCBtOwogICAgY2luID4+IG4gPj4gbTsKCiAgICAvLyBLaOG7n2kgdOG6oW8gdHLhuqFuZyB0aMOhaSBiYW4gxJHhuqd1IGNobyBow6BuZyAwIC8gdHLGsOG7m2MgaMOgbmcgMQogICAgZmlsbChkcF9tYXggKyAxLCBkcF9tYXggKyBtICsgMSwgLUlORik7CiAgICBmaWxsKGRwX21pbiArIDEsIGRwX21pbiArIG0gKyAxLCBJTkYpOwoKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47ICsraSkgewogICAgICAgIC8vIFTDoWkgc+G7rSBk4bulbmcgbeG6o25nIHRvw6BuIGPhu6VjIGLhurFuZyBjw6FjaCByZXNldCBnacOhIHRy4buLIGJhbiDEkeG6p3UgY2hvIGjDoG5nIGkKICAgICAgICBmaWxsKGN1cl9tYXggKyAxLCBjdXJfbWF4ICsgbSArIDEsIC1JTkYpOwogICAgICAgIGZpbGwoY3VyX21pbiArIDEsIGN1cl9taW4gKyBtICsgMSwgSU5GKTsKCiAgICAgICAgZm9yIChpbnQgaiA9IDE7IGogPD0gbTsgKytqKSB7CiAgICAgICAgICAgIGxvbmcgbG9uZyB2YWw7CiAgICAgICAgICAgIGNpbiA+PiB2YWw7CgogICAgICAgICAgICBpZiAoaSA9PSAxICYmIGogPT0gMSkgewogICAgICAgICAgICAgICAgY3VyX21heFsxXSA9IHZhbDsKICAgICAgICAgICAgICAgIGN1cl9taW5bMV0gPSB2YWw7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gSMaw4bubbmcgZGkgY2h1eeG7g24gWFXhu5BORyBExq/hu5pJICh04burIMO0IChpLTEsIGopKQogICAgICAgICAgICBpZiAoaSA+IDEpIHsKICAgICAgICAgICAgICAgIGN1cl9tYXhbal0gPSBtYXgoY3VyX21heFtqXSwgZHBfbWF4W2pdICsgdmFsKTsKICAgICAgICAgICAgICAgIGN1cl9taW5bal0gPSBtaW4oY3VyX21pbltqXSwgZHBfbWluW2pdICsgdmFsKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gSMaw4bubbmcgZGkgY2h1eeG7g24gU0FORyBQSOG6okkgKHThu6sgw7QgKGksIGotMSkpCiAgICAgICAgICAgIGlmIChqID4gMSkgewogICAgICAgICAgICAgICAgY3VyX21heFtqXSA9IG1heChjdXJfbWF4W2pdLCAtY3VyX21pbltqIC0gMV0gKyB2YWwpOwogICAgICAgICAgICAgICAgY3VyX21pbltqXSA9IG1pbihjdXJfbWluW2pdLCAtY3VyX21heFtqIC0gMV0gKyB2YWwpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBSb2xsaW5nOiBDb3B5IGvhur90IHF14bqjIGjDoG5nIGhp4buHbiB04bqhaSAoY3VyKSBzYW5nIGjDoG5nIGPFqSAoZHApIMSR4buDIGNodeG6qW4gYuG7iyBjaG8gaMOgbmcgdGnhur9wIHRoZW8KICAgICAgICBmb3IgKGludCBqID0gMTsgaiA8PSBtOyArK2opIHsKICAgICAgICAgICAgZHBfbWF4W2pdID0gY3VyX21heFtqXTsKICAgICAgICAgICAgZHBfbWluW2pdID0gY3VyX21pbltqXTsKICAgICAgICB9CiAgICB9CgogICAgY291dCA8PCBkcF9tYXhbbV0gPDwgIlxuIjsKCiAgICByZXR1cm4gMDsKfQ==