#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include typedef long long ll; typedef unsigned long long ull; //#pragma comment(linker, "/STACK:1024000000,1024000000") //#pragma comment(linker, "/STACK:36777216") //hdu 扩栈 #define mm(a) memset(a,0,sizeof(a)) #define lr rt<<1 #define rr rt<<1|1 #define sync std::ios::sync_with_stdio(false);std::cin.tie(0); #define inf 0x3f3f3f3f #define eqs 1e-8 #define lb(x) (x&(-x)) #define ch(a) (int(a-'a')+1) #define rep(i, a, b) for(int i=a;i<=b;i++) #define mkp(a, b) make_pair(a,b) #define re register #define umap(a) (a).reserve(1024);(a).max_load_factor(0.25); using namespace std; typedef pair pii; typedef pair pll; typedef pair piii; //const double pi=acos(-1); const int maxn=500005; //const ll Mod=1000000007; const ll Mod=998244353; ll a[maxn]; ll pre[maxn]; int main() { int t; scanf("%d",&t); int n; ll m; while(t--) { scanf("%d%lld",&n,&m); ll ans=0; ll x=0ll; ll mx; for(int i=1;i<=n;i++) { scanf("%lld",&a[i]); x+=a[i]; if(x<0) x=0; if(x>=m) { ans=1; } pre[i]=pre[i-1]+a[i]; } if(ans) { printf("%lld\n",ans); continue; } mx=x; for(int i=1;i<=n;i++) { x+=a[i]; if(x<0) x=0; if(x>=m) { ans=2; } } if(ans) { printf("%lld\n",ans); continue; } for(int i=1;i<=n;i++) { x+=a[i]; if(x<0) x=0; if(x>=m) { ans=3; } } if(ans) { printf("%lld\n",ans); continue; } if(pre[n]<=0) { printf("%d\n",-1); continue; } ans=2e18; ll d,sum; for(int i=1;i<=n;i++) { sum=m-pre[i]-mx; d=sum/pre[n]; if(sum%pre[n]) d++; if(sum<=0) d=0; ans=min(ans,d+2ll); } printf("%lld\n",ans); } return 0; }