#include<bitsdc++.h>
#define ll long long
#define ls(k) (k<<1)
#define rs(k) (k<<1|1)
using namespace std;
const int MAXN = 5e5+5;
const int INF = 1e9;
bool address_start;
ll sum[MAXN<<2],A[MAXN],m,lsh[MAXN];
int cnt[MAXN<<2],n;
bool address_end;
void pushup(int k)
{
sum[k]=sum[ls(k)]+sum[rs(k)];
cnt[k]=cnt[ls(k)]+cnt[rs(k)];
}
void build(int k,int l,int r)
{
sum[k]=cnt[k]=0;
if(l==r) return ;
int mid=l+r>>1;
build(ls(k),l,mid);
build(rs(k),mid+1,r);
}
void upd(int k,int l,int r,int x,int v)
{
if(l==r)
{
sum[k]+=lsh[l]*v;
cnt[k]+=v;
return ;
}
int mid=l+r>>1;
if(x<=mid) upd(ls(k),l,mid,x,v);
else upd(rs(k),mid+1,r,x,v);
pushup(k);
}
int find_num(int k,int l,int r,int c)
{
if(l==r) return l;
int mid=l+r>>1;
if(cnt[ls(k)]>=c) return find_num(ls(k),l,mid,c);
else return find_num(rs(k),mid+1,r,c-cnt[ls(k)]);
}
ll get_sum(int k,int l,int r,int c)
{
int mid=l+r>>1;
if(l==r) return sum[k];
if(cnt[ls(k)]>=c) return get_sum(ls(k),l,mid,c);
else return sum[ls(k)]+get_sum(rs(k),mid+1,r,c-cnt[ls(k)]);
}
ll get_Modifycount(int l,int r)
{
int len=r-l+1,mid=len+1>>1,num=find_num(1,1,n,mid);
return 1ll*mid*lsh[num]-1ll*(len-mid)*lsh[num] +
sum[1]-2ll*get_sum(1,1,n,mid);
}
int main()
{
// cout<<1.0*(&address_end-&address_start)/1024/1024<<"MB"<<endl;
int T;scanf("%d",&T);
while(T--)
{
scanf("%d %lld",&n,&m);
for(int i=1;i<=n;++i) scanf("%lld",&A[i]),A[i]-=i,lsh[i]=A[i];
int tot=0;
sort(lsh+1,lsh+1+n);
tot=unique(lsh+1,lsh+1+n)-lsh-1;
for(int i=1;i<=n;++i) A[i]=lower_bound(lsh+1,lsh+1+tot,A[i])-lsh;
build(1,1,n);
// for(int i=1;i<=n;++i) upd(1,1,n,A[i],1);
upd(1,1,n,A[1],1);
int r=2,ans=1;ll Modifycount=0;
for(int l=1;l<=n;++l)
{
Modifycount=get_Modifycount(l,r-1);
// cout<<"debug:"<<Modifycount<<" "<<l<<" "<<r-1<<endl;
while(r<=n&&Modifycount<=m)
{
upd(1,1,n,A[r],1);
++r;
Modifycount=get_Modifycount(l,r-1);
if(Modifycount<=m) ans=max(ans,r-l);
// cout<<"debug:"<<Modifycount<<" "<<l<<" "<<r-1<<endl;
}
// cout<<"len:"<<r-l<<endl;
if(Modifycount<=m) ans=max(ans,r-l);
upd(1,1,n,A[l],-1);
}
printf("%d\n",ans);
}
return 0;
}