#include <stdio.h>
#include <malloc.h>
void Nizcat(int* niz1, int* niz2, int n);
void Operacija1(int* nizNapitaka, int* n);
void Operacija2(int* nizNapitaka, int* n);
int maxNiza(int* niz, int n);

int main()
{
    int* nizCini;

    int n, k;

    scanf("%d %d", &n, &k);

    nizCini = (int*)calloc(n, sizeof(int));

    for (int i = 0; i < n; ++i)
    {
        scanf("%d", &nizCini[i]);
    }

    k--;

    int k1 = k * k - k + 2;

    int** kombinacijeOperacija = (int**)calloc(k1, sizeof(int*));

    kombinacijeOperacija[0] = (int*)calloc(k, sizeof(int));
    kombinacijeOperacija[1] = (int*)calloc(k, sizeof(int));

    for (int i = 0; i < k; ++i)
    {
        kombinacijeOperacija[0][i] = 0;
        kombinacijeOperacija[1][i] = 1;
    }

    for (int i = 0; i < k - 1; ++i)
    {
        int* niz = (int*)calloc(k, sizeof(int));

        for (int j = 0; j < i + 1; ++j)
        {
            niz[j] = 1;
        }

        for (int j = 0; j < k; ++j)
        {
            kombinacijeOperacija[i * k + j + 2] = (int*)calloc(k, sizeof(int));
            for (int g = 0; g < k; ++g)
            {
                kombinacijeOperacija[i * k + j + 2][g] = niz[(j + g) % k];
            }
        }

        free(niz);
    }

    int maxCin;

    for (int i = 0; i < k1; ++i)
    {
        int* niz = (int*)calloc(k, sizeof(int));
        Nizcat(niz, nizCini, n);
        int locN = n;

        for (int j = 0; j < k; ++j)
        {
            if (kombinacijeOperacija[i][j] == 0)
            {
                Operacija1(niz, &locN);
            }
            else
            {
                Operacija2(niz, &locN);
            }
        }

        int locMaxCini = maxNiza(niz, locN);

        if (i == 0)
        {
            maxCin = locMaxCini;
        }
        else if (maxCin < locMaxCini)
        {
            maxCin = locMaxCini;
        }
    }

    printf("%d", maxCin);

    free(kombinacijeOperacija);
}

void Nizcat(int* niz1, int* niz2, int n)
{
    for (int i = 0; i < n; ++i)
    {
        niz1[i] = niz2[i];
    }
}

void Operacija1(int* nizNapitaka, int* n)
{
    nizNapitaka[0] -= nizNapitaka[*n - 1];
    nizNapitaka[*n - 1] = 0;

    *n -= 1;
}

void Operacija2(int* nizNapitaka, int* n)
{
    nizNapitaka[*n - 1] -= nizNapitaka[0];

    for (int i = 0; i < *n - 1; ++i)
    {
        nizNapitaka[i] = nizNapitaka[i + 1];
    }

    *n -= 1;
}

int maxNiza(int* niz, int n)
{
    int m = niz[0];

    for (int i = 1; i < n; ++i)
    {
        if (niz[i] > m)
        {
            m = niz[i];
        }
    }

    return m;
}