#include //#include #include #include #include #include #include #include #include #include #include #include #define MAX(x,y) (((x)>(y)) ? (x) : (y)) #define MIN(x,y) (((x)<(y)) ? (x) : (y)) #define sq(x) (x)*(x) #define cei(a,b) (long long)(((a)+(b)-1)/(b)) #define mst(a,b) memset((a),b,sizeof((a))) #define fi first #define se second #define pb push_back using namespace std; const int MAXN = 1e6+5; const int N=1e5+5; const int E4=1e4; //const long long mod = 1e9+7 ; const long long mod = 998244353 ; const int inf = 0x3f3f3f3f; typedef long long ll; typedef unsigned long long ull; typedef pair pii; typedef pair pll; int dx[4]= {1,0,0,-1}; int dy[4]= {0,-1,1,0}; ll a[N]= {0},sum[N]; ll n,m; void solve() { mst(sum,0); scanf("%lld%lld",&n,&m); int flag=0; for(int i=1; i<=n; i++)scanf("%lld",a+i); for(int i=1; i<=n; i++)sum[i]=sum[i-1]+a[i]; ll maxadd=0,maxsub=0; for(int i=1; i<=n; i++) { maxadd=max(maxadd,sum[i]); maxsub=min(maxsub,sum[i]); } ll s=0,turn=1; for(int i=1; i<=n; i++) { s+=a[i]; if(s<0)s=0; if(s>=m) { flag=1; break; } } if(!flag) { turn++; for(int i=1; i<=n; i++) { s+=a[i]; if(s<0)s=0; if(s>=m) { flag=1; break; } } } int rc=0; if(!flag) { if(sum[n]<=0)turn=-1; else { while(1) { turn++; for(int i=1; i<=n; i++) { s+=a[i]; if(s<0)s=0; if(s>=m) { flag=1; break; } } if(flag)break; if(s>=-maxsub) { rc=1; break; } } if(rc) { ll need=m-maxadd; ll times=cei(need-s,sum[n]); // printf("s %lld need %lld times %lld\n",s,need,times) ; turn+=times+1; } } } printf("%lld\n",turn); } int main() { int T=1; scanf("%d",&T); for(int i=1; i<=T; i++) { // printf("Case %d:\n",i); solve(); } return 0; }