# 公式解説より # 2重ループは可能、を押し進めるべきだった # x, yで作れる数を全探索 # w, D, zで作れる数を全探索 # その組合せ数が答え # TLEする、defaultdictより配列の方が高速なのか? N, D = map(int, input().split()) from collections import defaultdict xy = [0]*(2*N**2+1) for x in range(1, N+1): for y in range(1, N+1): calc = x**2+y**2 xy[calc] += 1 wDz = [0]*(2*N**2+1) for w in range(1, N+1): for z in range(1, N+1): calc = w**2+D-z**2 if 0 < calc <= 2*N**2+1: wDz[calc] += 1 ans = 0 for i in range(1, 2*N**2+1): ans += xy[i]*wDz[i] print(ans)