#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
int maxCards(int n, int k, const vector<int>& a) {
map<int, int> freq;
for (int num : a) {
freq[num]++;
}
vector<pair<int, int>> sorted_freq(freq.begin(), freq.end());
int l = 0, total = 0, max_cards = 0;
for (int r = 0; r < sorted_freq.size(); ++r) {
if (r > 0 && sorted_freq[r].first != sorted_freq[r - 1].first + 1) {
// Reset window if not consecutive
l = r;
total = 0;
for (int i = l; i <= r; ++i)
total += sorted_freq[i].second;
} else {
total += sorted_freq[r].second;
}
// Maintain at most k distinct numbers
while (r - l + 1 > k) {
total -= sorted_freq[l].second;
++l;
}
max_cards = max(max_cards, total);
}
return max_cards;
}
int main() {
int t;
cin >> t;
while (t--) {
int n, k;
cin >> n >> k;
vector<int> a(n);
for (int i = 0; i < n; ++i) cin >> a[i];
cout << maxCards(n, k, a) << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBtYXhDYXJkcyhpbnQgbiwgaW50IGssIGNvbnN0IHZlY3RvcjxpbnQ+JiBhKSB7CiAgICBtYXA8aW50LCBpbnQ+IGZyZXE7CiAgICBmb3IgKGludCBudW0gOiBhKSB7CiAgICAgICAgZnJlcVtudW1dKys7CiAgICB9CgogICAgdmVjdG9yPHBhaXI8aW50LCBpbnQ+PiBzb3J0ZWRfZnJlcShmcmVxLmJlZ2luKCksIGZyZXEuZW5kKCkpOwogICAgaW50IGwgPSAwLCB0b3RhbCA9IDAsIG1heF9jYXJkcyA9IDA7CgogICAgZm9yIChpbnQgciA9IDA7IHIgPCBzb3J0ZWRfZnJlcS5zaXplKCk7ICsrcikgewogICAgICAgIGlmIChyID4gMCAmJiBzb3J0ZWRfZnJlcVtyXS5maXJzdCAhPSBzb3J0ZWRfZnJlcVtyIC0gMV0uZmlyc3QgKyAxKSB7CiAgICAgICAgICAgIC8vIFJlc2V0IHdpbmRvdyBpZiBub3QgY29uc2VjdXRpdmUKICAgICAgICAgICAgbCA9IHI7CiAgICAgICAgICAgIHRvdGFsID0gMDsKICAgICAgICAgICAgZm9yIChpbnQgaSA9IGw7IGkgPD0gcjsgKytpKQogICAgICAgICAgICAgICAgdG90YWwgKz0gc29ydGVkX2ZyZXFbaV0uc2Vjb25kOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRvdGFsICs9IHNvcnRlZF9mcmVxW3JdLnNlY29uZDsKICAgICAgICB9CgogICAgICAgIC8vIE1haW50YWluIGF0IG1vc3QgayBkaXN0aW5jdCBudW1iZXJzCiAgICAgICAgd2hpbGUgKHIgLSBsICsgMSA+IGspIHsKICAgICAgICAgICAgdG90YWwgLT0gc29ydGVkX2ZyZXFbbF0uc2Vjb25kOwogICAgICAgICAgICArK2w7CiAgICAgICAgfQoKICAgICAgICBtYXhfY2FyZHMgPSBtYXgobWF4X2NhcmRzLCB0b3RhbCk7CiAgICB9CgogICAgcmV0dXJuIG1heF9jYXJkczsKfQoKaW50IG1haW4oKSB7CiAgICBpbnQgdDsKICAgIGNpbiA+PiB0OwogICAgd2hpbGUgKHQtLSkgewogICAgICAgIGludCBuLCBrOwogICAgICAgIGNpbiA+PiBuID4+IGs7CiAgICAgICAgdmVjdG9yPGludD4gYShuKTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkgY2luID4+IGFbaV07CiAgICAgICAgY291dCA8PCBtYXhDYXJkcyhuLCBrLCBhKSA8PCBlbmRsOwogICAgfQogICAgcmV0dXJuIDA7Cn0K