#include using namespace std; const int M=2e5+5; int n;long long m,A[M]; int max0(int x,int y) { if(A[x]>A[y])return x; if(A[y]>A[x])return y; return x>1]+1; for(int i=0;i<=2*n;i++)Max0[i][0]=i; for(int i=1;(1<A[i])Rb[Stk[top]]=i,top--; Stk[++top]=i; } // for(int i=0;i=A[pos]+m) { eve+=p0-pos; return (void)printf("%lld\n",(eve-1)/n+1); } eve+=Rb[pos]-pos; pos=Rb[pos]%n; } else { int p0=st.Query(pos,n); if(A[p0]>=A[pos]+m) { eve+=p0-pos; return (void)printf("%lld\n",(eve-1)/n+1); } eve+=n-pos; long long nows=A[n]-A[pos],alls=A[n],firs=A[st.Query(0,n)]; if(alls<=0)return (void)puts("-1"); // printf("pos=%d eve=%lld nows=%lld alls=%lld firs=%lld\n",pos,eve,nows,alls,firs); if(m-firs-nows<=0)return (void)printf("%lld\n",eve/n+1); return (void)printf("%lld\n",eve/n+(m-firs-nows-1)/alls+2); } } } int main() { int T;scanf("%d",&T); while(T --> 0) { scanf("%d%lld",&n,&m); for(int i=1;i<=n;i++)scanf("%lld",&A[i]); Solve(); } return 0; }