#include <cstdio>
#include <queue>
#include <algorithm>
#include <string.h>
//#include <bits/stdc++.h>
using namespace std;
const int maxn=100000;
int t;
int a[maxn+10];
int sum[maxn+10];
int n,m;
bool judge(int mid){
priority_queue<int,vector<int>,greater<int> > q;
int cnt=0;
int s=(n-1)%(mid-1);
if(s){
s++;
int temp=sum[(n-1)%(mid-1)+1];
q.push(temp);
cnt+=temp;
}
for(int i=s+1;i<=n;i++){
q.push(a[i]);
}
while(q.size()!=1){
int temp=0;
for(int i=1;i<=mid;i++){
if(!q.empty()){
temp+=q.top();
q.pop();
} else {
break;
}
}
q.push(temp);
cnt+=temp;
}
return cnt<=m;
}
int solve(){
int lb=2,ub=n;
while(ub-lb>1){
int mid=(ub+lb)>>1;
if(judge(mid)) ub=mid;
else lb=mid;
}
if(judge(lb)){
return lb;
} else return ub;
}
int main()
{
scanf("%d",&t);
while(t--){
sum[0]=0;
scanf("%d%d",&n,&m);
if(n<=1){
printf("1\n");
continue;
}
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
sum[i]=sum[i-1]+a[i];
}
sort(a+1,a+1+n);
for(int i=1;i<=n;i++){
sum[i]=sum[i-1]+a[i];
}
//printf("%d\n",judge(3));
int ans=solve();
printf("%d\n",ans);
}
return 0;
}