import java.util.*;
import java.io.*;
public class Main {
int T = nextInt();
while (T-- > 0) {
int n = nextInt();
long k = nextLong();
long[] a = new long[n];
for (int i = 0; i < n; i++) {
a[i] = nextLong();
}
long left = 0, right = 0;
for (int i = 1; i < n; i++) {
right
= Math.
max(right,
Math.
abs(a
[i
] - a
[i
-1])); }
long ans = right;
while (left <= right) {
long mid = (left + right) / 2;
if (check(a, mid, k)) {
ans = mid;
right = mid - 1;
} else {
left = mid + 1;
}
}
}
}
private static boolean check(long[] a, long d, long k) {
int n = a.length;
long[] b = a.clone();
long operations = 0;
for (int i = 1; i < n; i++) {
if (b[i] - b[i-1] > d) {
operations += b[i] - b[i-1] - d;
b[i] = b[i-1] + d;
}
}
for (int i = n-2; i >= 0; i--) {
if (b[i] - b[i+1] > d) {
operations += b[i] - b[i+1] - d;
b[i] = b[i+1] + d;
}
}
return operations <= k;
}
while (tok == null || !tok.hasMoreTokens()) {
}
return Integer.
parseInt(tok.
nextToken()); }
while (tok == null || !tok.hasMoreTokens()) {
}
return Long.
parseLong(tok.
nextToken()); }
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5pby4qOwoKcHVibGljIGNsYXNzIE1haW4gewogICAgc3RhdGljIEJ1ZmZlcmVkUmVhZGVyIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihTeXN0ZW0uaW4pKTsKICAgIHN0YXRpYyBTdHJpbmdUb2tlbml6ZXIgdG9rOwogICAgCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgSU9FeGNlcHRpb24gewogICAgICAgIGludCBUID0gbmV4dEludCgpOwogICAgICAgIHdoaWxlIChULS0gPiAwKSB7CiAgICAgICAgICAgIGludCBuID0gbmV4dEludCgpOwogICAgICAgICAgICBsb25nIGsgPSBuZXh0TG9uZygpOwogICAgICAgICAgICBsb25nW10gYSA9IG5ldyBsb25nW25dOwogICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgICAgICAgICAgYVtpXSA9IG5leHRMb25nKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIGxvbmcgbGVmdCA9IDAsIHJpZ2h0ID0gMDsKICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBuOyBpKyspIHsKICAgICAgICAgICAgICAgIHJpZ2h0ID0gTWF0aC5tYXgocmlnaHQsIE1hdGguYWJzKGFbaV0gLSBhW2ktMV0pKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgbG9uZyBhbnMgPSByaWdodDsKICAgICAgICAgICAgd2hpbGUgKGxlZnQgPD0gcmlnaHQpIHsKICAgICAgICAgICAgICAgIGxvbmcgbWlkID0gKGxlZnQgKyByaWdodCkgLyAyOwogICAgICAgICAgICAgICAgaWYgKGNoZWNrKGEsIG1pZCwgaykpIHsKICAgICAgICAgICAgICAgICAgICBhbnMgPSBtaWQ7CiAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSBtaWQgLSAxOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gbWlkICsgMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oYW5zKTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gY2hlY2sobG9uZ1tdIGEsIGxvbmcgZCwgbG9uZyBrKSB7CiAgICAgICAgaW50IG4gPSBhLmxlbmd0aDsKICAgICAgICBsb25nW10gYiA9IGEuY2xvbmUoKTsKICAgICAgICBsb25nIG9wZXJhdGlvbnMgPSAwOwogICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgICAgIGlmIChiW2ldIC0gYltpLTFdID4gZCkgewogICAgICAgICAgICAgICAgb3BlcmF0aW9ucyArPSBiW2ldIC0gYltpLTFdIC0gZDsKICAgICAgICAgICAgICAgIGJbaV0gPSBiW2ktMV0gKyBkOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZvciAoaW50IGkgPSBuLTI7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgICAgIGlmIChiW2ldIC0gYltpKzFdID4gZCkgewogICAgICAgICAgICAgICAgb3BlcmF0aW9ucyArPSBiW2ldIC0gYltpKzFdIC0gZDsKICAgICAgICAgICAgICAgIGJbaV0gPSBiW2krMV0gKyBkOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBvcGVyYXRpb25zIDw9IGs7CiAgICB9CiAgICAKICAgIHN0YXRpYyBpbnQgbmV4dEludCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAgICAgICAgd2hpbGUgKHRvayA9PSBudWxsIHx8ICF0b2suaGFzTW9yZVRva2VucygpKSB7CiAgICAgICAgICAgIHRvayA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoYnIucmVhZExpbmUoKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBJbnRlZ2VyLnBhcnNlSW50KHRvay5uZXh0VG9rZW4oKSk7CiAgICB9CiAgICAKICAgIHN0YXRpYyBsb25nIG5leHRMb25nKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKICAgICAgICB3aGlsZSAodG9rID09IG51bGwgfHwgIXRvay5oYXNNb3JlVG9rZW5zKCkpIHsKICAgICAgICAgICAgdG9rID0gbmV3IFN0cmluZ1Rva2VuaXplcihici5yZWFkTGluZSgpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIExvbmcucGFyc2VMb25nKHRvay5uZXh0VG9rZW4oKSk7CiAgICB9Cn0=