#include<bits/stdc++.h>
using namespace std;
int longestCommonSubarray(vector<vector<int>> &arr,int m,int n){ // arr is the array of size m*n
int index[m][n+1];
// Create an index array, so that we can access index of any element in a row in O(1) time.
for(int i=0;i<m;i++)for(int j=0;j<n;j++)index[i][arr[i][j]]=j;
int l=1,max_length=1; // There will be atleast one element in the subarray. So, max_length will be atleast one.
for(int i=1;i<n;i++){
int curr_element=arr[0][i];
int prev_element=arr[0][i-1];
bool flag=0;
for(int j=1;j<m;j++){
if(index[j][prev_element]+1!=index[j][curr_element]){ // check whether current element is next to the previous element in the jth row
flag=1;
break;
}
}
if(flag){ // If flag is true ,then there will be atleast one row where the current element is not immediate next to the previous element .
l=1;
}
else l++;
max_length=max(max_length,l);
}
return max_length;
}
void solve(){
int n,m;
cin>>m>>n;
vector<vector<int>> arr(m,vector<int> (n));
for(int i=0;i<m;i++)for(int j=0;j<n;j++)cin>>arr[i][j];
cout<<longestCommonSubarray(arr,m,n);
}
int main(){
int tc;
cin>>tc;
while(tc--){
solve();
cout<<"\n";
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKaW50IGxvbmdlc3RDb21tb25TdWJhcnJheSh2ZWN0b3I8dmVjdG9yPGludD4+ICZhcnIsaW50IG0saW50IG4peyAgICAgIC8vIGFyciBpcyB0aGUgYXJyYXkgb2Ygc2l6ZSBtKm4KICAgIGludCBpbmRleFttXVtuKzFdOwogICAgLy8gQ3JlYXRlIGFuIGluZGV4IGFycmF5LCBzbyB0aGF0IHdlIGNhbiBhY2Nlc3MgaW5kZXggb2YgYW55IGVsZW1lbnQgaW4gYSByb3cgaW4gTygxKSB0aW1lLgogICAgZm9yKGludCBpPTA7aTxtO2krKylmb3IoaW50IGo9MDtqPG47aisrKWluZGV4W2ldW2FycltpXVtqXV09ajsKCiAgICBpbnQgbD0xLG1heF9sZW5ndGg9MTsgICAgICAgICAvLyBUaGVyZSB3aWxsIGJlIGF0bGVhc3Qgb25lIGVsZW1lbnQgaW4gdGhlIHN1YmFycmF5LiBTbywgbWF4X2xlbmd0aCB3aWxsIGJlIGF0bGVhc3Qgb25lLgogICAgZm9yKGludCBpPTE7aTxuO2krKyl7CiAgICAgICAgaW50IGN1cnJfZWxlbWVudD1hcnJbMF1baV07CiAgICAgICAgaW50IHByZXZfZWxlbWVudD1hcnJbMF1baS0xXTsKICAgICAgICBib29sIGZsYWc9MDsKICAgICAgICBmb3IoaW50IGo9MTtqPG07aisrKXsKICAgICAgICAgICAgaWYoaW5kZXhbal1bcHJldl9lbGVtZW50XSsxIT1pbmRleFtqXVtjdXJyX2VsZW1lbnRdKXsgLy8gY2hlY2sgd2hldGhlciBjdXJyZW50IGVsZW1lbnQgaXMgbmV4dCB0byB0aGUgcHJldmlvdXMgZWxlbWVudCBpbiB0aGUganRoIHJvdwogICAgICAgICAgICAgICAgZmxhZz0xOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYoZmxhZyl7ICAgLy8gSWYgZmxhZyBpcyB0cnVlICx0aGVuIHRoZXJlIHdpbGwgYmUgYXRsZWFzdCBvbmUgcm93IHdoZXJlIHRoZSBjdXJyZW50IGVsZW1lbnQgaXMgbm90IGltbWVkaWF0ZSBuZXh0IHRvIHRoZSBwcmV2aW91cyBlbGVtZW50IC4KICAgICAgICAgICAgbD0xOwogICAgICAgIH0KICAgICAgICBlbHNlIGwrKzsKICAgICAgICBtYXhfbGVuZ3RoPW1heChtYXhfbGVuZ3RoLGwpOwogICAgfQogICAgcmV0dXJuIG1heF9sZW5ndGg7Cn0Kdm9pZCBzb2x2ZSgpewogICAgaW50IG4sbTsKICAgIGNpbj4+bT4+bjsKICAgIHZlY3Rvcjx2ZWN0b3I8aW50Pj4gYXJyKG0sdmVjdG9yPGludD4gKG4pKTsKICAgIGZvcihpbnQgaT0wO2k8bTtpKyspZm9yKGludCBqPTA7ajxuO2orKyljaW4+PmFycltpXVtqXTsKICAgIGNvdXQ8PGxvbmdlc3RDb21tb25TdWJhcnJheShhcnIsbSxuKTsKCn0KaW50IG1haW4oKXsKICAgIGludCB0YzsKICAgIGNpbj4+dGM7CiAgICB3aGlsZSh0Yy0tKXsKICAgICAgICBzb2x2ZSgpOwogICAgICAgIGNvdXQ8PCJcbiI7CiAgICB9Cn0=