#include <bits/stdc++.h>
using namespace std;
int histogram(vector<int> &v, int m) {
int n = (int) v.size();
vector<int> pref(n);
for(int i = 1; i < n; i++) {
pref[i] = pref[i - 1] + (v[i] < 0);
}
int area = 0;
stack<int> st;
for(int i = 0; i < n; i++) {
while(!st.empty() and abs(v[st.top()]) > abs(v[i])) {
int u = st.top();
st.pop();
int start = st.empty() ? -1 : st.top();
int minus = pref[i - 1] - (start <= 0 ? 0 : pref[start - 1]);
area = max(area, (i - start - 1 - minus) * abs(v[u]));
}
st.push(i);
}
while(!st.empty()) {
int u = st.top();
st.pop();
int start = st.empty() ? -1 : st.top();
int minus = pref[n - 1] - (start <= 0 ? 0 : pref[start - 1]);
area = max(area, (n - start - 1 - minus) * abs(v[u]));
}
return area;
}
int main() {
int T;
cin >> T;
while(T--) {
int n, m;
cin >> n >> m;
vector<vector<int>> a(n, vector<int> (m));
for(int i = 0; i < n; i++) {
for(int j = 0; j < m; j++) {
cin >> a[i][j];
}
}
vector<vector<int>> col(n, vector<int> (m, 1));
for(int j = 0; j < m; j++) {
for(int i = 1; i < n; i++) {
if(a[i][j] > a[i - 1][j]) {
col[i][j] += col[i - 1][j];
}
}
}
vector<int> check(m, -1);
int sol = 0;
for(int i = 0; i < n; i++) {
vector<int> v;
for(int j = 1; j < m; j++) {
if(a[i][j] <= a[i][j - 1]) {
check[j] = i;
}
}
for(int j = 0; j < m; j++) {
if(j == 0) {
v.push_back(col[i][j]);
}
else {
int last = check[j];
v.push_back(min(col[i][j], i - last));
v.back() *= -1;
v.push_back(col[i][j]);
}
}
sol = max(sol, histogram(v, m));
}
cout << sol << '\n';
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgaGlzdG9ncmFtKHZlY3RvcjxpbnQ+ICZ2LCBpbnQgbSkgewoJaW50IG4gPSAoaW50KSB2LnNpemUoKTsKCXZlY3RvcjxpbnQ+IHByZWYobik7Cglmb3IoaW50IGkgPSAxOyBpIDwgbjsgaSsrKSB7CgkJcHJlZltpXSA9IHByZWZbaSAtIDFdICsgKHZbaV0gPCAwKTsKCX0KCWludCBhcmVhID0gMDsKCXN0YWNrPGludD4gc3Q7Cglmb3IoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CgkJd2hpbGUoIXN0LmVtcHR5KCkgYW5kIGFicyh2W3N0LnRvcCgpXSkgPiBhYnModltpXSkpIHsKCQkJaW50IHUgPSBzdC50b3AoKTsKCQkJc3QucG9wKCk7CgkJCWludCBzdGFydCA9IHN0LmVtcHR5KCkgPyAtMSA6IHN0LnRvcCgpOwoJCQlpbnQgbWludXMgPSBwcmVmW2kgLSAxXSAtIChzdGFydCA8PSAwID8gMCA6IHByZWZbc3RhcnQgLSAxXSk7CQoJCQlhcmVhID0gbWF4KGFyZWEsIChpIC0gc3RhcnQgLSAxIC0gbWludXMpICogYWJzKHZbdV0pKTsKCQl9CgkJc3QucHVzaChpKTsKCX0KCXdoaWxlKCFzdC5lbXB0eSgpKSB7CgkJaW50IHUgPSBzdC50b3AoKTsKCQlzdC5wb3AoKTsKCQlpbnQgc3RhcnQgPSBzdC5lbXB0eSgpID8gLTEgOiBzdC50b3AoKTsKCQlpbnQgbWludXMgPSBwcmVmW24gLSAxXSAtIChzdGFydCA8PSAwID8gMCA6IHByZWZbc3RhcnQgLSAxXSk7CQoJCWFyZWEgPSBtYXgoYXJlYSwgKG4gLSBzdGFydCAtIDEgLSBtaW51cykgKiBhYnModlt1XSkpOwoJfQoJcmV0dXJuIGFyZWE7Cn0KCmludCBtYWluKCkgewoJaW50IFQ7CgljaW4gPj4gVDsKCXdoaWxlKFQtLSkgewoJCWludCBuLCBtOwoJCWNpbiA+PiBuID4+IG07CgkJdmVjdG9yPHZlY3RvcjxpbnQ+PiBhKG4sIHZlY3RvcjxpbnQ+IChtKSk7CgkJZm9yKGludCBpID0gMDsgaSA8IG47IGkrKykgewoJCQlmb3IoaW50IGogPSAwOyBqIDwgbTsgaisrKSB7CgkJCQljaW4gPj4gYVtpXVtqXTsKCQkJfQoJCX0KCQkKCQl2ZWN0b3I8dmVjdG9yPGludD4+IGNvbChuLCB2ZWN0b3I8aW50PiAobSwgMSkpOwoJCWZvcihpbnQgaiA9IDA7IGogPCBtOyBqKyspIHsKCQkJZm9yKGludCBpID0gMTsgaSA8IG47IGkrKykgewoJCQkJaWYoYVtpXVtqXSA+IGFbaSAtIDFdW2pdKSB7CgkJCQkJY29sW2ldW2pdICs9IGNvbFtpIC0gMV1bal07CgkJCQl9CgkJCX0KCQl9CgkJCgkJdmVjdG9yPGludD4gY2hlY2sobSwgLTEpOwoJCWludCBzb2wgPSAwOwoJCWZvcihpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKCQkJdmVjdG9yPGludD4gdjsKCQkJZm9yKGludCBqID0gMTsgaiA8IG07IGorKykgewoJCQkJaWYoYVtpXVtqXSA8PSBhW2ldW2ogLSAxXSkgewoJCQkJCWNoZWNrW2pdID0gaTsKCQkJCX0KCQkJfQoJCQlmb3IoaW50IGogPSAwOyBqIDwgbTsgaisrKSB7CgkJCQlpZihqID09IDApIHsKCQkJCQl2LnB1c2hfYmFjayhjb2xbaV1bal0pOwoJCQkJfQoJCQkJZWxzZSB7CgkJCQkJaW50IGxhc3QgPSBjaGVja1tqXTsKCQkJCQl2LnB1c2hfYmFjayhtaW4oY29sW2ldW2pdLCBpIC0gbGFzdCkpOwoJCQkJCXYuYmFjaygpICo9IC0xOwoJCQkJCXYucHVzaF9iYWNrKGNvbFtpXVtqXSk7CgkJCQl9CgkJCX0KCQkJc29sID0gbWF4KHNvbCwgaGlzdG9ncmFtKHYsIG0pKTsKCQl9CgkJY291dCA8PCBzb2wgPDwgJ1xuJzsKCX0KCQoJcmV0dXJuIDA7Cn0K
NAozIDMKMyAwIDQKMSAyIDUKNCA2IDcKMyAzCjEgMiA1CjQgNiA3CjEwIDggMwo1IDUKMiA1IDMgOCAzCjEgNCA2IDggNAozIDYgNyA5IDUKMSAzIDYgNCAyCjIgNiA0IDMgMQo0ICA0CjEgMiA1IDYKMiAzIDQgNwozIDQgNSA4CjggOSAxMCAxMDAK
4
3 3
3 0 4
1 2 5
4 6 7
3 3
1 2 5
4 6 7
10 8 3
5 5
2 5 3 8 3
1 4 6 8 4
3 6 7 9 5
1 3 6 4 2
2 6 4 3 1
4 4
1 2 5 6
2 3 4 7
3 4 5 8
8 9 10 100