#include <stdio.h>

using namespace std;

int N, M;

int IzracunajDosadnost(char zid[])
{
    int dosadnost = 0;

    for(int j = 0; j < M; j++)
    {
        int obojeni = 0;
        int neobojeni = 0;
        for(int i = 0; i < N; i++)
        {
            if(zid[j + i * M] == '#')
            {
                obojeni++;
            }
            else
            {
                neobojeni++;
            }
        }
        dosadnost+=(obojeni*neobojeni);
    }

    return dosadnost;
}
int najmanjaDosadnost = - 1;
void Oboji(int vrsta, char zid[] ,int granice[])
{
    if(vrsta == N)
    {
        if(najmanjaDosadnost == -1)
        {
            najmanjaDosadnost = IzracunajDosadnost(zid);
        }
        else
        {
            int tempDosadnost = IzracunajDosadnost(zid);
            if(najmanjaDosadnost > tempDosadnost)
            {
                najmanjaDosadnost = tempDosadnost;
            }
        }
    }
    else
    {
        for(int i = 0; i < M; i++)
        {
            zid[i+vrsta*M] = '.';
        }
        for(int i = 0; i < granice[vrsta]; i++)
        {
            zid[i+vrsta*M] = '#';
        }
        Oboji(vrsta+1,zid,granice);
        for(int i = 0; i < M; i++)
        {
            zid[i+vrsta*M] = '.';
        }
        for(int i = granice[vrsta]; i < M ; i++)
        {
            zid[i+vrsta*M] = '#';
        }
        Oboji(vrsta+1,zid,granice);
    }
}

int main()
{

    scanf("%d %d", &N, &M);

    char zid[N*M];

    int granice[N];

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

    for(int i = 0; i < N; i++)
    {
        for(int j = 0; j < M; j++)
        {
            zid[j + i * M] = '.';
        }
    }

    Oboji(0,zid,granice);

    printf("%d",najmanjaDosadnost);


    return 0;
}