Lotteria di quadri (quadri) [Execution Timed Out]

Ciao, qualcuno mi potrebbe dare un suggerimento? Immagino che l’algoritmo che ho trovato (il più semplice?) non sia abbastanza efficiente.

int quadri(int N, long long M, int V[]) {
    int B = 1;

    while(true){
        long long sum = 0;
        for(int i = 0; i < B; ++i){
            sum += V[i];
        }

        for(int i = 0; i < N - B; ++i){
            sum -= V[i];
            sum += V[i + B];

            if(sum > M){
                return --B;
            }
        }

        ++B;
    }

    return -1;
}

Prima di tutto ci sono degli errori, cioè che qualora M fosse maggiore della somma dei valori dei quadri la funzione ripeterebbe il loop all’infinito senza mai ritornare un valore, per evitare questo basta mettere dei limiti a B, come while(B <= N)
Inoltre non controlli se la somma dei primi B elementi sia maggiore di M, fai il controllo solo per i sottoinsiemi successivi e nel caso in cui nessuna sottosequenza fosse maggiore di M dovresti restituire N, non - 1.
In secondo luogo, la tua soluzione è in O(N^2), mentre per rientrare nel tempo limite del problema è necessaria una soluzione al più in O(NlogN).
Se ti interessa, ci sono soluzioni sia in O(NlogN) che in O(N), le lascio in spoiler qui sotto.
O(NlogN):Binary Search
O(N):Sliding Window