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 JAVA):

Solution:
import java.io.*;
import java.util.*;

public class interview {

    /**
     * @param args
     */
    static int len = 0;
    static int KK = 0;
    static int mod = 1000000007;
    static int[][]dp  ;
    public static int solve(int before, int taken) {
        if (taken == KK && before <= len) {
            return 1;
        }
        if (before > len ) {
            return 0;
        }
        if(dp[before][taken] != -1) return dp[before][taken];
        //long x = solve(before, taken + 1) % mod;
        int y = 0;
        for (int i = 1; i < len + 1; i++) {
                
            if (i * before > len) {
                break;
            }
                y += (solve( i * before, taken + 1) % mod);
                y %= mod;

        }
        return dp[before][taken]=((y) % mod);

    }

    public static void main(String[] args) throws IOException,
            InterruptedException {

         BufferedReader k=new BufferedReader(new InputStreamReader(System.in));
         PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
         StringTokenizer str=new StringTokenizer(k.readLine());
         len = Integer.parseInt(str.nextToken());
         KK = Integer.parseInt(str.nextToken());
         dp = new int[len+1][KK+1];
         for (int i = 0; i < dp.length; i++) {
            Arrays.fill(dp[i], -1);
        }
         out.println(solve(1,0));
         out.close();

    }

}