Problem: Nobuo-kun and Shizuo-kun are playing a game of competing for territories on a rectangular island. As shown in Fig. 1 below, the entire island is made up of square compartments divided in a grid pattern, and the profits and losses resulting from these are indicated by integers.

<image>



In this game, move one piece to determine the boundaries of the territory. At the beginning of the game, the piece is at the northwestern end of the island (Fig. ①). The trajectory of the piece when moving this piece to the southeastern end of the island becomes the boundary of the territory. The two players move the pieces alternately. Pieces can only be moved to the grid point next to the south or the grid point next to the east (Fig. 2). When the piece reaches the edge of the island, move it in the south or east direction. The game is over when the piece reaches the southeastern end.

The area on the northeast side of the boundary after the game is the area of ​​the first player, and the area on the southwest side is the area of ​​the second player (Fig. ③). The sum of the profits and losses generated from the parcels contained within each player's territory is that player's core. Both of them are quite accustomed to the game and move the pieces accurately so that the value obtained by subtracting the opponent's score from their own score is the largest in the end.




Create a program that calculates the outcome at the end of the game given the size of the island and the gains and losses that result from each parcel. The result is the absolute value of the difference between the scores of Nobuo-kun and Shizuo-kun.



Input

The input is given in the following format.


W H
s1,1 s1,2 ... s1, W
s2,1 s2,2 ... s2, W
::
sH, 1 sH, 2 ... sH, W


The first line gives the number of east-west and north-south sections contained in the island W, H (1 ≤ W, H ≤ 1000). The following row H is given the gains and losses si, j (-1000 ≤ si, j ≤ 1000) that arise from the compartments in row i and column j. However, the direction in which the value of i increases is south, and the direction in which the value of j increases is east.

Output

The absolute value of the difference between the scores of Nobuo-kun and Shizuo-kun is output in one line.

Examples

Input

2 1
-2 1


Output

1


Input

2 2
2 -3
3 -1


Output

3


Input

5 4
5 3 2 -5 2
2 -4 2 8 -4
2 3 -7 6 7
3 -4 10 -3 -3


Output

5

Solution (in CPP):

Solution:
#include <bits/stdc++.h>

#define fto(i, x, y) for(int i = (x); i <= (y); ++i)
#define fdto(i, x, y) for(int i = (x); i >= (y); --i)
#define ftoa(i, x, y, a) for(int i = (x); i <= (y); i += a)
#define ftoit(it, var) for (__typeof(var.begin()) it = var.begin(); it != var.end(); ++it)

#define ii pair<int, int>
#define mp make_pair
#define FF first
#define SS second

#define vi vector<int>
#define vii vector<ii>
#define ll long long
#define vll vector<ll>

#define eb emplace_back
#define ef emplace_front
#define lb lower_bound
#define ub upper_bound
#define sz(a) (int)a.size()

#define oo 1000000007
#define OO 1000000000000000007LL

using namespace std;

#define Pro "tmp"
#define maxN 1507

int f[maxN][maxN][5], dp[maxN][maxN];
int a[maxN][maxN];

int main() {

    int n, m;
    scanf("%d%d", &m, &n);

    fto (i, 1, n) {
        fto (j, 1, m) {
            scanf("%d", &a[i][j]);
        }
    }

    fdto (i, n, 1) {
        fdto (j, m, 1) {
            dp[i][j] = dp[i+1][j]+dp[i][j+1]-dp[i+1][j+1]+a[i][j];
        }
    }

    fdto (sum, n+m, 2) {
        fto (i, 1, n) {
            int j = sum-i;
            if (j < 1 || j > m) continue;

            f[i][j][0] = max(dp[i][j]-f[i+1][j][1], dp[i][j+1]-f[i][j+1][1]);
            f[i][j][1] = max(dp[i+1][j]-f[i+1][j][0], dp[i][j]-f[i][j+1][0]);
        }
    }

//    fto (i, 1, n) {
//        fto (j, 1, m) printf("%3d", dp[i][j]);
//        puts("");
//    }
//    puts("");
//
//    fto (i, 1, n) {
//        fto (j, 1, m) printf("%3d", f[i][j][0]);
//        puts("");
//    }
//    puts("");
//
//    fto (i, 1, n) {
//        fto (j, 1, m) printf("%3d", f[i][j][1]);
//        puts("");
//    }

    cout << abs(dp[1][1]-2*f[1][1][0]) << endl;
    return 0;
}