n,k=map(int,input().split())
mod=10**9+7
f=[0]+[1]*k
for _ in range(n-1):
total=sum(f)%mod
nf=[0]*(k+1)
for i in range(1,k+1):
if i==1:
nf[i]=1
else:
nf[i]=total
for c in range(2,k+1):
if c*i>k:
break
nf[i]=(nf[i]-f[c*i]+mod)%mod
f=nf
print(sum(f)%mod)
每一个数前面可以放什么数?要么是小于等于他的数,要么是大于他且不是他的倍数
所以我们先加前一行的总和,然后再去减前一行里是这个数倍数的项
会不会超时呢,写一个暴力的程序在本地跑了一遍就很容易得到,[2,1e5)这个区间里面每个数的倍数个数总和为966751,而n最大为10,相乘也不会超过1e7,所以轻轻松松搞定