/*
TASK: rtri
LANG:C++
*/
#include<iostream.h>
#include<math.h>
int NOD(int p, int q);
int min (int i, int j);
int main()
{
    int n;
    int m;
    cin>>n>>m;
    long int br=0;
    for (int i=0; i<=n; i++)
        for(int j=0; j<=m; j++)
        {
                
                br=br+i*j+i*(m-j)+(n-i)*j+(n-i)*(m-j);
                for (int p=i+1; p<=n; p++)
                    for (int q=0; q<=j-1; q++)
                        if (NOD(p-i, j-q)==1)
                          br=br+ min((n-i)/(p-i), j/(j-q)) * ( min((n-i)/(j-q), (m-j)/(p-i))+min(j/(p-i), i/(j-q)));
                for (int p1=0; p1<=i-1; p1++)
                    for(int q1=0; q1<=j-1; q1++)
                        if (NOD(i-p1, j-q1)==1)
                           if (p1==0) br=br+min(i/(j-q1), (m-j)/(i-p1));
                              else   br=br+min(i/p1, j/(j-q1))*min(i/(j-q1), (m-j)/(i-p1));
                for (int p2=i+1; p2<=n; p2++)
                    for(int q2=j+1; q2<=m; q2++)
                            if (NOD(p2-i, q2-j)==1)
                            br=br+min((n-i)/(p2-i), (m-j)/(q2-j))*min((m-j)/(p2-i), i/(q2-j)); 
                           
        }
        
    cout<<br<<endl;

   
    
    return 0;
}
int min(int i, int j)
{
    if (i<j) return i;
    else return j;
}
int NOD(int p, int q)
{
    if (p==0) return q;
    if (q==0) return p;
    if (p>q) return NOD(p-q, q);
    else return NOD (p, q-p);
}
