#pragma GCC optimize("Ofast","inline","-ffast-math") #pragma GCC target("avx,sse2,sse3,sse4,mmx") #include #include #include #define int long long using namespace __gnu_pbds; using namespace std; struct custom_hash { static uint64_t splitmix64(uint64_t x) { x += 0x9e3779b97f4a7c15; x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9; x = (x ^ (x >> 27)) * 0x94d049bb133111eb; return x ^ (x >> 31); } size_t operator()(uint64_t x) const { static const uint64_t FIXED_RANDOM = chrono::steady_clock::now().time_since_epoch().count(); return splitmix64(x + FIXED_RANDOM); } }; int n,m,a[100010]; signed main() { ios::sync_with_stdio(false); int t;cin>>t; while(t--){ cin>>n>>m; for(int i=1;i<=n;i++) cin>>a[i]; int x=0,mx=0; for(int i=1;i<=n;i++){ x+=a[i]; if(x<0) x=0; mx=max(mx,x); } if(mx>=m){ cout<<1<<'\n'; continue; } bool flag=false; for(int i=1;i<=n;i++){ x+=a[i]; if(x<0) x=0,flag=true; mx=max(mx,x); } if(mx>=m){ cout<<2<<'\n'; continue; } if(flag){ cout<<-1<<'\n'; continue; } int sum=0,maxv=0; for(int i=1;i<=n;i++){ sum+=a[i]; maxv=max(maxv,sum); } if(sum==0){ cout<<-1<<'\n'; continue; } if(x+maxv>=m){ cout<<3<<'\n'; continue; } int a=(m-maxv-x)/sum+((m-maxv-x)%sum!=0); cout<<3+a<<'\n'; continue; } return 0; }