""" Dirichlet Product """ def mul(N,K,L,data_as,data_ab,data_bs,data_bb): data_rs = [0 for i in range(K+1)] data_rb = [0 for i in range(L+1)] for i in range(1,K+1): for j in range(1,K//i+1): data_rs[i*j] += data_as[i] * data_bs[j] data_as_cum = [data_as[i] for i in range(K+1)] data_bs_cum = [data_bs[i] for i in range(K+1)] for i in range(1,K+1): data_as_cum[i] += data_as_cum[i-1] data_bs_cum[i] += data_bs_cum[i-1] def cumA(i): if 1<=i<=L: return data_ab[i] else: return data_as_cum[(N//i)] def cumB(i): if 1<=i<=L: return data_bb[i] else: return data_bs_cum[(N//i)] for i in range(1,L+1): M = int((N//i)**.5) for j in range(1,M+1): data_rb[i] += data_as[j] * cumB(i*j) for j in range(1,M+1): data_rb[i] += data_bs[j] * (cumA(i*j)-cumA(N//M)) return data_rs,data_rb def single_mul(N,K,L,a,A,val): res = [a[i] for i in range(K+1)] Res = [A[i] for i in range(L+1)] for i in range(1,K+1): if i*val<=K: res[i*val] += a[i] cum = [a[i] for i in range(K+1)] for i in range(1,K+1): cum[i] += cum[i-1] def cumA(i): if 1<=i<=L: return A[i] else: return cum[N//i] for i in range(1,L+1): Res[i] += cumA(i*val) return res,Res import sys,random,bisect from collections import deque,defaultdict from heapq import heapify,heappop,heappush from itertools import permutations from math import gcd,log input = lambda :sys.stdin.readline().rstrip() mi = lambda :map(int,input().split()) li = lambda :list(mi()) _N,_K = mi() N = _K K = min(N,int(N**.5)+1) L = K res = [0 for i in range(K+1)] res[1] = 1 Res = [0 for i in range(L+1)] for i in range(1,L+1): Res[i] = 1 for i in range(1,_N+1): res,Res = single_mul(N,K,L,res,Res,i) print((Res[1]-1))