#include <iostream>

using namespace std;

int value(int *O, int m, int n)
{
    int yes = 0;
    int all = 0;
    for(int i = 0; i < m; i++)
    {
        yes = 0;
        for(int j = 0; j < n; j++)
            if(O[i*n+j] == 1)
                yes += 1;
        all += yes * (n - yes);
    }


    return all;
}

void zameni(int* A, int* O, int k)
{
    for(int i = 0; i < k; i++)
        O[i] = A[i];
}

int* arrayOne(int *O, int k, int l, int m, int n)
{
    int A[m*n];
    zameni(O, A, m*n);

    for(int i = 0; i < k; i++)
        A[i] = 1;

    for(int i = 0; i < l; i++)
        A[m+i] = 1;


    return A;
}
int* arrayTwo(int *O, int k, int l, int m, int n)
{
    int A[m*n];
    zameni(O, A, m*n);

    for(int i = 0; i < k; i++)
        A[i] = 1;

    for(int i = 2*m-1; i >= m+l; i--)
        A[i] = 1;


    return A;
}
int* arrayThree(int *O, int k, int l, int m, int n)
{
    int A[m*n];
    zameni(O, A, m*n);

    for(int i = m-1; i >= m-k; i--)
        A[i] = 1;

    for(int i = 0; i < l; i++)
        A[m+i] = 1;


    return A;
}
int* arrayFour(int *O, int k, int l, int m, int n)
{
    int A[m*n];
    zameni(O, A, m*n);

    for(int i = m-1; i >= m-k; i--)
        A[i] = 1;

    for(int i = 2*m-1; i >= m+l; i--)
        A[i] = 1;



    return A;
}

int* makeArray(int* O, int m, int n, int k, int l)
{
    int Op[m*n], Ol[m*n];

    zameni(O, Op, m*n);
    zameni(O, Ol, m*n);

    for(int i = m*l; i < m*l+k; i++)
        Op[i] = 1;
    for(int i = m*(l+1)-1; i >= m+l+k-1; i--)
        Ol[i] = 1;

    if(value(Op, m, l) > value(Ol, m, l))
        return Ol;
    else
        return Op;
}

int main()
{
    int n, m;

    cin >> n >> m;

    int K[n];
    int O[n*m];

    for(int i = 0; i < m*n; i++)
        O[i] = 0;

    for(int i = 0; i < n; i++)
        cin >> K[i];

    int O1[m*n], O2[m+n], O3[m*n], O4[m*n];

    for(int i = 0; i < m*n; i++)
        O1[i] = 0;
    for(int i = 0; i < m*n; i++)
        O2[i] = 0;
    for(int i = 0; i < m*n; i++)
        O3[i] = 0;
    for(int i = 0; i < m*n; i++)
        O4[i] = 0;

    zameni(arrayOne(O, K[0], K[1], m, n), O1, m*n);
    zameni(arrayTwo(O, K[0], K[1], m, n), O2, m*n);
    zameni(arrayThree(O, K[0], K[1], m, n), O3, m*n);
    zameni(arrayFour(O, K[0], K[1], m, n), O4, m*n);

    if(min(min(value(O1, m, 2), value(O2, m, 2)), min(value(O3, m, 2), value(O4, m, 2))) == value(O1, m, 2))
    {
        zameni(O1, O, m*n);
    }
    else if(min(min(value(O1, m, 2), value(O2, m, 2)), min(value(O3, m, 2), value(O4, m, 2))) == value(O2, m, 2))
    {
        zameni(O2, O, m*n);
    }
    else if(min(min(value(O1, m, 2), value(O2, m, 2)), min(value(O3, m, 2), value(O4, m, 2))) == value(O3, m, 2))
    {
        zameni(O3, O, m*n);
    }
    else
    {
        zameni(O4, O, m*n);
    }

    for(int i = 2; i < n; i++)
    {
        zameni(makeArray(O, m, n, K[i], i), O, m*n);

    }
    cout << value(O, m, n);

    return 0;
}