#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
typedef long long LL;
int a[N];
int n , m;
map<int, LL>mp;
bool check(LL x)
{
LL sum = 0 , tmp = 0;
for(int i = 1; i <= n; i ++)
{
if(mp[i] > x)sum += mp[i] - x;
else tmp += (x - mp[i]) / 2;
}
return tmp >= sum;
}
int main()
{
int t;
cin >> t;
while(t --)
{
mp.clear();
cin >> n >> m;
for(int i = 1; i <= m; i ++)
{
cin >> a[i];
mp[a[i]] ++;
}
LL l = 0, r = 1e10;
while(l < r)
{
LL mid = (l + r) >> 1;
if(check(mid))r = mid;
else l = mid + 1;
}
cout << l << endl;
}
}
二分时间的条件就是 每个工人在设定的时间内能干的最多任务之和 与 m 比较, 如果大于m则缩短时间,否则增加时间(工人首先干自己精通的任务,其次用剩余的时间干不精通的任务 )