/*
TASK: rtri
LANG: C
*/
#include <stdio.h>
#define maxW (1<<5)

int m,n;
long long br=0;
char memo[maxW][maxW][maxW][maxW][2];

void solve()
{
     int x1,y1,x2,y2,x3,y3,hh;
     for (x1=0;x1<n;++x1)
         for (y1=0;y1<m;++y1)
             for (x2=0;x2<n;++x2) 
                 for (y2=0;y2<m;++y2) if (x1 != y1 || x2 != y2) if (y1-y2!=0)
                     for (x3=0;x3<n;++x3)
                         {
                         y3 = x1*x1+y1*y1-x1*x2-y1*y2-x1*x3+x2*x3;
                         if (y3%(y1-y2) == 0) {
                            y3/=(y1-y2);
                            if (y3 >= 0 && y3 < m)
                               if (y3 != y2 || x3 != x2)
                                  if (y3 != y1 || x3 != x1)
                                     if (!((memo[x2][y2][x3][y3][0] == x1+1) && (memo[x2][y2][x3][y3][1] == y1+1)))
                                     if (!((memo[x3][y3][x2][y2][0] == x1+1) && (memo[x3][y3][x2][y2][1] == y1+1)))
                                     {
                                     ++br;
                                     memo[x2][y2][x3][y3][0] = x1+1;
                                     memo[x2][y2][x3][y3][1] = y1+1;
                                     /*printf("(%d,%d)(%d,%d)(%d,%d)\n",x1,y1,x2,y2,x3,y3);*/
                                     }
                            }
                         }
     
     printf("%lld\n",br);
}

int main()
{
    scanf("%d%d",&m,&n);++n;++m;
    solve();
    return 0;
}
