package main
import "fmt"
func max(a, b int64) int64 {
if a > b {
return a
}
return b
}
func min(a, b int64) int64 {
if a < b {
return a
}
return b
}
func max3(a, b, c int64) int64 {
return max(a, max(b, c))
}
func main() {
var a, b int64
fmt.Scan(&a, &b)
var n int64 = a + b
var ans int64 = 0
for l := int64(1); l <= n; {
q := n / l
rr := n / q
if rr > n {
rr = n
}
var c1 int64 = -(b / q)
temp := q + 1
var c2 int64 = (a + temp - 1) / temp
var c3 int64 = a / q
var c4 int64 = -((b + temp - 1) / temp)
var block int64 = 0
{
low := max3(c2-c1, c3-c4, c3)
up := c3 - c1
left := max(low, l)
right := min(up, rr)
if left <= right {
block += right - left + 1
}
}
{
low := c2 - c1
up := c3 - c4
if c1 <= c4 {
left := max(low, l)
right := min(up, rr)
if left <= right {
block += right - left + 1
}
}
}
{
low := c2 - c1
if 0 <= c4 {
up := c3
left := max(low, l)
right := min(up, rr)
if left <= right {
block += right - left + 1
}
}
}
{
low := max(c3-c4, c3)
up := c2 - c1
if c2 <= c3 {
left := max(low, l)
right := min(up, rr)
if left <= right {
block += right - left + 1
}
}
}
{
low := max(c2 - c4, l)
up := min(c2 - c1, c3 - c4)
right := min(up, rr)
if low <= right {
block += right - low + 1
}
}
{
if 0 <= c4 {
low := max(c2, l)
up := min(c2 - c1, c3)
right := min(up, rr)
if low <= right {
block += right - low + 1
}
}
}
ans += block
l = rr + 1
}
fmt.Println(ans)
}