#include <iostream>
#include <cstdio>
using namespace std;
const int MAXN = 4100;
int n, m;
long long a[MAXN][MAXN];
struct SegmentTree {
int lx, ly, rx, ry;
long long Sum;
} Tree[2005 * 2005 * 16 + 5];
void Build(int p, int lx, int ly, int rx, int ry) {
Tree[p].lx = lx;
Tree[p].rx = rx;
Tree[p].ly = ly;
Tree[p].ry = ry;
if (lx == ly && rx == ry) {
Tree[p].Sum = a[lx][rx];
return;
}
int midx = (lx + ly) / 2;
int midy = (rx + ry) / 2;
Build(p * 4, lx, midx, rx, midy);
if (midx + 1 <= ly)
Build(p * 4 +