/*
TASK:rtri
LANG:C++
*/
#include <stdio.h>

struct vyzel
{
       int x,y;
};
int D(vyzel a,vyzel b,vyzel c)
{
    return a.x*(b.y - c.y) + b.x*(c.y-a.y) + c.x*(a.y - b.y);
}
int CP(vyzel q,vyzel w,vyzel e)
{
    int dx1 = w.x - q.x;
    int dx2 = e.x - q.x;
    int dy1 = w.y - q.y;
    int dy2 = e.y - q.y;
    return dx1*dx2 + dy1*dy2;
}
int nine(vyzel a,vyzel b,vyzel c)
{
    if( D(a,b,c) == 0)
    {
        return 0;
        
    }
    if(CP(a,b,c) == 0)return 1;
        if(CP(b,c,a) == 0)return 1;
        if(CP(c,b,a) == 0)return 1;
    return 0;
}
int n,m;
int main()
{
    vyzel a[1024];
    scanf("%d %d",&n,&m);
    int o;
    int  i,j,p;
    long br = 0;
    o = (n+1)*(m+1);
    for(i = 0;i <= m;i++)
    {
          for(j = 0;j <= n;j++)
          {
                a[br].x = i+1;
                a[br].y = j+1;
                br++;
          }
    }
    br = 0;
   for(i = 0;i < o;i++)
    {
          for(j = i+1;j < o;j++)
          {
                for(p = j+1;p < o;p++)
                {
                      if(nine(a[i],a[j],a[p]))
                      {
                                br++;
                      }
                }
          }
    }
    printf("%d\n",br);
    return 0;
}
