← Home
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)
}