#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;
}
