#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
using namespace std;

static FILE *fr, *fw;

// Declaring variables
static int N;
static long long M;
static int* V;
static int B;

// Declaring functions

//MIOOOOO CODICEEEEE

//FUNZIONE DA MODIFICAREEEEEEEEEEEEEEEEEEEEEEEEEE
//selezione binaria per capire il numero di b perfetto
int quadri(int N, long long M, int V[]) {
    int Ii = 0; //punto di inizio
    int If = N; //punto di fine
    while (Ii < If) {
      int mid = (Ii+If)/2;
      
      //se è oltre la lista
      if (mid==0) {
        return 0;
        break;
      }

      int tot=0;

      //testo se mid va bene
      bool b=true;
      for(int i=0; i<N-mid+1; i++) { //per ogni quadro da cui potrei partire (quindi senza sforare)
        //cout<<"variazione"<<i<<endl;
        if (tot==0) { //se non ho ancora calcolato niente
          for (int ib=0; ib<mid; ib++) {
            tot += V[ib];
          }
        } else { //se avevo già calcolato il precedente lo sfrutto
          //cout<<"vx"<<V[i-1]<<endl;
          //cout<<"v_add"<<i+B_prova<<endl;
          tot = tot - V[i-1] + V[i+mid-1];
        }
        //cout<<tot<<endl;
        //controllo rispetto ad m
        if (tot>M) {
          b=false;
          If = mid-1; // non va bene, mi sposto
          break;
        }
      }
      if (b) {
        Ii = mid;
      }
      
      
      
    }
    //quando esce da questo while vuol dire che Ii = If e questo è il valore ottimale di B
    return Ii;

}
/*
int main() {
	fr = stdin;
	fw = stdout;

	// Iterators used in for loops
	int i0;

	// Reading input
	fscanf(fr, "%d %lld", &N, &M);
	V = (int*)malloc(N * sizeof(int));
	for (i0 = 0; i0 < N; i0++) {
	    fscanf(fr, "%d", &V[i0]);
	}

	// Calling functions
	B = quadri(N, M, V);

	// Writing output
	fprintf(fw, "%d\n", B);
	
	fclose(fr);
	fclose(fw);
	return 0;
}*/