#include <iostream>
#include <vector>
using namespace std;

int main()
{
    unsigned long n, m, d = 2, broj = 1, koliko = 0, unutPovrsina = 0;
    scanf("%d %d", &n, &m);
    vector<vector<unsigned long>> tribine; // 2d vektor zato sto mi ne da da koristim 2d array

    // petlja koja puni 2d vektor sa brojevima od 1 do n * m
    for (int i = 0; i < n; i++)
    {
        // privremeni vektor za unos 1 reda zato sto ne radi bez toga
        vector<unsigned long> ulaz;
        for (int j = 0; j < m; j++)
        {
            ulaz.push_back(broj);
            broj++;
        }
        tribine.push_back(ulaz);
    }

    // ovde vise ne znam u potpunosti sta radi sta samo znam da radi
    unutPovrsina = (n-2) * (m-2) / 2;
    if (n == 1) koliko += m;
    else if (m == 1) koliko += n;
    else if ((n % 2 == 0) && (m % 2 == 0)) koliko += (n * 2) + (m - 2) * 2 + unutPovrsina;
    else koliko += (n * 2) + (m - 2) * 2 + unutPovrsina;

    printf("%llu", koliko);
}