RT,不知道哪里错了。
#include<bits/stdc++.h>
#define int long long
#define Tothetime_tolife using
#define AK namespace
#define IOI std
Tothetime_tolife AK IOI;
const int Mod1=998244353;
const int Mod2=1000000007;
int gcd(int a,int b){return __gcd(a,b);}
int lcm(int a,int b){return a*b/gcd(a,b);}
void read(int& x){char ch;int f=1;x=0;while(ch<'0'||ch>'9'){ch=getchar();if(ch=='-') f=-1;}while(ch>='0'&&ch<='9'){ch=getchar();x=x*10+ch-'0';}x*=f;}
void write(int x){if(x>9){write(x/10);}putchar(x%10+'0');return;}
const int N=100005;
int a[N];
signed main(){
ios::sync_with_stdio(false);
int tst;
cin>>tst;
while(tst--){
int n,k;
cin>>n>>k;
a[0]=-1;
for(int i=1;i<=n;i++){
cin>>a[i];
}
int res=n,now=0;
sort(a+1,a+n+1);
for(int i=1;i<=n;i++){
if(a[i]!=a[i-1]){
now++;
}
if(a[i]!=now-1){
res=i-1;
break;
}
}
if(k>=n-res){
cout<<0<<endl;
continue;
}else{
int p=res+k,mex=n;
int diff=k;
for(int i=1;i<=n-k;i++){
if(a[i]!=a[i-1]) diff++;
}
for(int i=1;i<=n;i++){
if(a[i]>a[i-1]+1){
int tot=a[i]-a[i-1]-1;
if(k>=tot) k-=tot;
else{
mex=a[i-1]+k+1;
break;
}
}
}
cout<<diff-mex<<endl;
}
}
return 0;
}
//STO 来看我程序的人 Orz