#include <bits/stdc++.h>
using namespace std;
#define pii pair<int,int>
#define mp(a,b) make_pair(a,b)
const int N=1e5+7;
int t,n,k,a[N],cnt=0;
map<int,int>ma;
priority_queue<pii>que;
void clear(priority_queue<pii>&p){
priority_queue<pii>q;
swap(p,q);
return ;
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>t;
while(t--){
cin>>n>>k;
ma.clear();
for(int i=1;i<=n;i++)cin>>a[i],++ma[a[i]];
sort(a+1,a+n+1);
int cnt=0,maxn=0;
for(int i=0;;i++){
if(ma[i])maxn=i+1;
else{
if(cnt==k || i+1>n)break;
cnt++;
maxn=i+1;
}
}
cnt=0;
a[0]=a[n+1]=-1;
for(int i=1;i<=n;i++)if(a[i]!=a[i-1])++cnt;
int lst=0;
for(int i=1;i<=n;i++){
if(a[i]==lst)++lst;
}
clear(que);
int sum=0;
for(int i=n;i>=1;i--){
if(k==0)break;
if(a[i]>=maxn && a[i]!=a[i+1]){
sum+=ma[a[i]];
que.push({-ma[a[i]],a[i]});
}
if(a[i]<maxn)break;
}
if(sum<k){
for(int i=n;i>=1;i--){
if(k==0)break;
if(a[i]>=maxn){
k--;
ma[a[i]]--;
++cnt;
if(ma[a[i]]==0)--cnt;
ma[lst]++;
a[i]=lst;
++lst;
while(ma[lst]){
++lst;
}
}
if(a[i]<maxn)break;
}
}
else{
while(!que.empty()){
int u=-que.top().first,v=que.top().second;
que.pop();
if(u<=k){
while(u){
while(ma[lst])++lst;
k--;
u--;
ma[v]--;
ma[lst]++;
cnt++;
if(ma[v]==0)cnt--;
}
}
else{
while(k){
while(ma[lst])++lst;
k--;
u--;
ma[v]--;
ma[lst]++;
cnt++;
if(ma[v]==0)cnt--;
}
}
if(k==0)break;
}
}
for(int i=n;i>=1;i--){
if(k==0)break;
if(a[i]>=maxn && ma[a[i]]==1){
k--;
ma[a[i]]--;
++cnt;
if(ma[a[i]]==0)--cnt;
ma[lst]++;
a[i]=lst;
++lst;
while(ma[lst]){
++lst;
}
}
else break;
}
for(int i=1;i<=n;i++){
while(k>0 && ma[a[i]]>1){
k--;
ma[a[i]]--;
ma[lst]++;
lst++;
++cnt;
}
}
for(int i=1;i<=n;i++){
if(a[i]==lst)++lst;
}
cout<<cnt-maxn<<"\n";
}
return 0;
}