#include <bits/stdc++.h>
using namespace std;
#define int long long
using i64 = long long;
const i64 P = 998244353;
struct BIT {
int n;
vector<i64> w;
BIT() {}
BIT(int n) {
this->n = n; // 注意 n 不能 +1
w.resize(n + 1);
}
void add(int x, i64 k) {
for (; x <= n; x += x & -x) {
w[x] += k;
}
}
void add(int x, int y, i64 k) {
add(x, k), add(y, -k);
}
i64 ask(int x) {
i64 ans = 0;
for (; x; x -= x & -x) {
ans += w[x];
}
return ans;
}
i64 ask(int x, int y) {
return ask(y) - ask(x - 1);
}
int kth(int k) { // ex: 查找第k大的值
int ans = 0;
for (int i = __lg(n); i >= 0; i--) {
int val = ans + (1 << i);
if (val < n && w[val] < k) {
k -= w[val];
ans = val;
}
}
return ans + 1;
}
i64 get(auto val) { // ex: 获取逆序对数量
this->n = val.size(); // 注意 n 不能 +1
w.resize(n + 1);
vector<pair<int, int>> alls;
for (int i = 0; i < n; i++) { // 输入从0开始
alls.emplace_back(val[i], i + 1);
}
sort(alls.begin(), alls.end());
i64 ans = 0;
for (auto [val, idx] : alls) {
ans += 1ll * ask(idx + 1, n);
add(idx, 1);
}
return ans;
}
};
void solve() {
int n;
i64 k;
cin >> n >> k;
vector<i64> a(n), h(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
a[i] += n - i;
h[i] = a[i];
}
sort(h.begin(), h.end());
h.erase(unique(h.begin(), h.end()), h.end());
unordered_map<i64, int> mp;
for (int i = 0; i < h.size(); i++) {
mp[h[i]] = i + 1;
}
int ans = 0;
BIT t1(n), t2(n);
auto col = [&](int l, int r) -> i64 {
int mid = (r - l + 2) / 2;
int pos = t1.kth(mid);
i64 sma = t2.ask(pos), big = t2.ask(pos + 1, n);
i64 siz1 = t1.ask(pos), siz2 = t1.ask(pos + 1, n);
i64 val = h[pos - 1];
// cout << sma << ' ' << big << ' ' << siz1 << ' ' << siz2 << ' ' << val << '\n';
i64 ans1 = siz1 * val - sma + big - siz2 * val;
mid++;
if (t1.kth(mid) != pos) {
pos = t1.kth(mid);
sma = t2.ask(pos), big = t2.ask(pos + 1, n);
siz1 = t1.ask(pos), siz2 = t1.ask(pos + 1, n);
val = h[pos - 1];
i64 ans2 = siz1 * val - sma + big - siz2 * val;
return min(ans1, ans2);
}
return ans1;
};
for (int l = 0, r = 0; r < n; r++) {
t1.add(mp[a[r]], 1);
t2.add(mp[a[r]], a[r]);
// cout << l << ' ' << r << ' ' << col(l, r) << '\n';
while (col(l, r) > k) {
t1.add(mp[a[l]], -1);
t2.add(mp[a[l]], -a[l]);
l++;
}
// cout << l << ' ' << r << ' ' << col(l, r) << '\n';
ans = max(ans, r - l + 1);
}
cout << ans << '\n';
}
int main() {
ios::sync_with_stdio(0); cin.tie(0), cout.tie(0);
int t = 1;
cin >> t;
while(t--) solve();
return 0;
}
/*
1
6 0
100 3 4 5 99 100
5
7 5
7 2 5 5 4 11 7
6 0
100 3 4 5 99 100
5 6
1 1 1 1 1
5 50
100 200 300 400 500
1 100
3
*/