/*
TASK: rtri
LANG:C++
*/

#include <iostream>

using namespace std;

int n, m;
long result;
int x, y;
int multipl[2] = {0};
int i, j;
int buf;
	

int cases(int change[])
{
	if (change[0] > 0 && change[1] > 0)
		if (x + change[0] < n && y + change[1] < m) return 1;
		else return 0;
	if (change[0] > 0 && change[1] < 0)
		if (x + change[0] < n && y + change[1] >= 0) return 1;
		else return 0;
	if (change[0] < 0 && change[1] > 0)
		if (x + change[0] >= 0 && y + change[1] < m) return 1;
		else return 0;
	if (change[0] < 0 && change[1] < 0)
		if (x + change[0] >= 0 && y + change[1] >= 0) return 1;
		else return 0;
	return 0;
}			

void func (int change[])
{
	for (i = 0; i < n; i++)
		for (j = 0; j < m; j++)
		{
			multipl[0] = multipl[1] = 0;
			x = i;
			y = j;
							
			while (cases(change))
			{
				x += change[0];
				y += change[1];
				multipl[0]++;
			}
			if (multipl[0])
			{
				buf = change[0];
				change[0] = change[1];
				change[1] = -buf;
				
				while (cases(change))
				{
					x += change[0];
					y += change[1];
					multipl[1]++;
				}
				buf = change[0];
				change[0] = -change[1];
				change[1] = buf;
			}
			result += multipl[0] * multipl[1];

			change [0] *= -1;
			multipl[0] = multipl[1] = 0;
			x = i;
			y = j;
							
			while (cases(change))
			{
				x += change[0];
				y += change[1];
				multipl[0]++;
			}
			if (multipl[0])
			{
				buf = change[0];
				change[0] = change[1];
				change[1] = -buf;
				
				while (cases(change))
				{
					x += change[0];
					y += change[1];
					multipl[1]++;
				}
				buf = change[0];
				change[0] = -change[1];
				change[1] = buf;
			}
			result += multipl[0] * multipl[1];
			change [0] *= -1;

			change [1] *= -1;
			multipl[0] = multipl[1] = 0;
			x = i;
			y = j;
							
			while (cases(change))
			{
				x += change[0];
				y += change[1];
				multipl[0]++;
			}
			if (multipl[0])
			{
				buf = change[0];
				change[0] = change[1];
				change[1] = -buf;
				
				while (cases(change))
				{
					x += change[0];
					y += change[1];
					multipl[1]++;
				}
				buf = change[0];
				change[0] = -change[1];
				change[1] = buf;
			}
			result += multipl[0] * multipl[1];
			change [1] *= -1;

			change [0] *= -1;
			change [1] *= -1;
			multipl[0] = multipl[1] = 0;
			x = i;
			y = j;
							
			while (cases(change))
			{
				x += change[0];
				y += change[1];
				multipl[0]++;
			}
			if (multipl[0])
			{
				buf = change[0];
				change[0] = change[1];
				change[1] = -buf;
				
				while (cases(change))
				{
					x += change[0];
					y += change[1];
					multipl[1]++;
				}
				buf = change[0];
				change[0] = -change[1];
				change[1] = buf;
			}
			result += multipl[0] * multipl[1];
			change [0] *= -1;
			change [1] *= -1;
	}
}

int main ()
{
	int change[2] = {0};
	cin >> n >> m;
	n++;
	m++;
	result = m*(m-1)*n*(n-1);
	for (change[0] = 1; change[0] < n; change[0]++)
		for (change[1] = 1; change[1] < m; change[1]++)	func (change);
	cout << result;
	return 0;
}