# coding: UTF-8 import sys #sys.setrecursionlimit(n) import heapq import re import bisect import random import math import itertools from collections import defaultdict, deque from copy import deepcopy from decimal import * def find(x): if node[x] < 0: return x else: node[x] = find(node[x]) return node[x] def unite(x, y): x = find(x) y = find(y) if x != y: if rank[x] > rank[y]: node[x] += node[y] node[y] = x else: node[y] += node[x] node[x] = y if rank[x] == rank[y]: rank[y] += 1 def is_same(x, y): return find(x) == find(y) def size(x): return -node[find(x)] n, p = map(int, input().split()) node = [-1 for i in range(n + 1)] rank = [0 for _ in range(n + 1)] used = [False for _ in range(n+1)] for i in range(2,int(n // 2) + 1): if used[i]: continue for j in range(i, n + 1, i): if i + j > n: break used[i + j] = True unite(i, i + j) print(size(find(p)))