import math
from collections import defaultdict
def bfs(graph, root, target):
visited = set()
queue = [[root]]
if root == target:
return 0
while queue:
path = queue.pop(0)
node = path[-1]
if node not in visited:
neighbours = graph[node]
for neighbour in neighbours:
new_path = list(path)
new_path.append(neighbour)
queue.append(new_path)
if neighbour == target:
return len(new_path) - 1
visited.add(node)
return -1
def largest_fact(num):
for i in range(2,int(math.sqrt(num))+1):
if num%i==0:
return num//i
return 1
def update(graph,num):
tmp = num
while(True):
if tmp==1:
break
lg_fact = largest_fact(tmp)
graph[tmp].add(lg_fact)
graph[lg_fact].add(tmp)
tmp = lg_fact
n1,n2 = map(int,input().split())
graph = defaultdict(set)
update(graph,n1)
update(graph,n2)
print(bfs(graph,n1,n2))
aW1wb3J0IG1hdGgKZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKCmRlZiBiZnMoZ3JhcGgsIHJvb3QsIHRhcmdldCk6Cgl2aXNpdGVkID0gc2V0KCkKCXF1ZXVlID0gW1tyb290XV0KCWlmIHJvb3QgPT0gdGFyZ2V0OgoJCXJldHVybiAwCgl3aGlsZSBxdWV1ZToKCQlwYXRoID0gcXVldWUucG9wKDApCgkJbm9kZSA9IHBhdGhbLTFdCgkJaWYgbm9kZSBub3QgaW4gdmlzaXRlZDogCgkJCW5laWdoYm91cnMgPSBncmFwaFtub2RlXQoJCQlmb3IgbmVpZ2hib3VyIGluIG5laWdoYm91cnM6IAoJCQkJbmV3X3BhdGggPSBsaXN0KHBhdGgpCgkJCQluZXdfcGF0aC5hcHBlbmQobmVpZ2hib3VyKQoJCQkJcXVldWUuYXBwZW5kKG5ld19wYXRoKQoJCQkJaWYgbmVpZ2hib3VyID09IHRhcmdldDoKCQkJCQlyZXR1cm4gbGVuKG5ld19wYXRoKSAtIDEKCQkJdmlzaXRlZC5hZGQobm9kZSkKCXJldHVybiAtMQoKZGVmIGxhcmdlc3RfZmFjdChudW0pOgoJZm9yIGkgaW4gcmFuZ2UoMixpbnQobWF0aC5zcXJ0KG51bSkpKzEpOgoJCWlmIG51bSVpPT0wOgoJCQlyZXR1cm4gbnVtLy9pCglyZXR1cm4gMQoKZGVmIHVwZGF0ZShncmFwaCxudW0pOgoJdG1wID0gbnVtCgl3aGlsZShUcnVlKToKCQlpZiB0bXA9PTE6CgkJCWJyZWFrCgkJbGdfZmFjdCA9IGxhcmdlc3RfZmFjdCh0bXApCgkJZ3JhcGhbdG1wXS5hZGQobGdfZmFjdCkKCQlncmFwaFtsZ19mYWN0XS5hZGQodG1wKQoJCXRtcCA9IGxnX2ZhY3QKCgpuMSxuMiA9IG1hcChpbnQsaW5wdXQoKS5zcGxpdCgpKQpncmFwaCA9IGRlZmF1bHRkaWN0KHNldCkKdXBkYXRlKGdyYXBoLG4xKQp1cGRhdGUoZ3JhcGgsbjIpCnByaW50KGJmcyhncmFwaCxuMSxuMikp