Problem: Mashmokh's boss, Bimokh, didn't like Mashmokh. So he fired him. Mashmokh decided to go to university and participate in ACM instead of finding a new job. He wants to become a member of Bamokh's team. In order to join he was given some programming tasks and one week to solve them. Mashmokh is not a very experienced programmer. Actually he is not a programmer at all. So he wasn't able to solve them. That's why he asked you to help him with these tasks. One of these tasks is the following.

A sequence of l integers b1, b2, ..., bl (1 ≤ b1 ≤ b2 ≤ ... ≤ bl ≤ n) is called good if each number divides (without a remainder) by the next number in the sequence. More formally <image> for all i (1 ≤ i ≤ l - 1).

Given n and k find the number of good sequences of length k. As the answer can be rather large print it modulo 1000000007 (109 + 7).

Input

The first line of input contains two space-separated integers n, k (1 ≤ n, k ≤ 2000).

Output

Output a single integer — the number of good sequences of length k modulo 1000000007 (109 + 7).

Examples

Input

3 2


Output

5


Input

6 4


Output

39


Input

2 1


Output

2

Note

In the first sample the good sequences are: [1, 1], [2, 2], [3, 3], [1, 2], [1, 3].

Solution (in PYTHON3):

Solution:
from __future__ import print_function
import sys
from collections import *
from heapq import *
from functools import *
INF=float("inf")
NINF=float("-inf")

try:
    input=raw_input
except:
    pass

def read_string():
    return input()

def read_int_line():
    return [int(x) for x in input().split(" ")]

def read_int():
    return int(input())

class TreeNode(object):
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None
    def __str__(self):
        q=deque()
        ans=[]
        q.append(self)
        ans.append(self.val)
        while q:
            cur=q.popleft()
            ans.append(cur.left.val if cur.left else "null")
            ans.append(cur.right.val if cur.right else "null")
            if cur.left:
                q.append(cur.left)
            if cur.right:
                q.append(cur.right)
        while ans and ans[-1] == "null":
            ans.pop()
        return str(ans).replace("'null'", 'null')

def toTreeNode(s):
    l = eval(s.replace("null", "None"))
    n=len(l)
    if not n:
        return None
    root=TreeNode(l[0])
    q=deque()
    q.append(root)
    i=1
    while q and i < n:
        cur=q.popleft()
        if l[i] != None:
            cur.left = TreeNode(l[i])
            q.append(cur.left)
        i+=1
        if i>=n:
            break
        if l[i] != None:
            cur.right=TreeNode(l[i])
            q.append(cur.right)
        i+=1
    return root

class Djs:
    def __init__(self, n):
        self.w=[1]*n
        self.p=[-1]*n
    def find(self, x):
        p=self.p[x]
        if p==-1:
            return x
        else:
            self.p[x]=self.find(p)
            return self.p[x]
    def union(self, x, y):
        x,y=self.find(x),self.find(y)
        if x==y:
            return
        if self.w[x]>self.w[y]:
            x,y=y,x
        self.p[x]=y
        self.w[y]+=self.w[x]
    def roots(self):
        return [x for x, y in enumerate(self.p) if y==-1]

def doit():
    n,k=read_int_line()
    dp=[[0]*(n+1) for _ in range(k+1)]
    factors=[[] for _ in range(n+1)]
    for i in range(1,n+1):
        j=i
        while j<=n:
            factors[j].append(i)
            j+=i
    

    P=10**9+7
    for ni in range(1, n+1):
        dp[1][ni]=1
    for ki in range(2, k+1):
        for ni in range(1, n+1):
            for fi in factors[ni]:
                dp[ki][ni]=(dp[ki][ni]+dp[ki-1][fi])%P

    ans=sum(dp[k])%P
    print("%d"%ans)

        



if __name__ == "__main__":
    try:
        while True:
            doit()
    except EOFError:
        pass