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.util.*;
import java.io.*;

public class Main{

    BufferedReader in;
    StringTokenizer str = null;
    PrintWriter out;

    private String next() throws Exception{
    	if (str == null || !str.hasMoreElements())
    	    str = new StringTokenizer(in.readLine());
    	return str.nextToken();
    }
    
    private int nextInt() throws Exception{
	   return Integer.parseInt(next());
    }
    
    int n,k;
    int mem[][];
    boolean []prime;
    final static int MOD = (int)(1e9)+7;

    public void run() throws Exception{
    	in = new BufferedReader(new InputStreamReader(System.in));
    	out = new PrintWriter(System.out);
        n = nextInt();
        k = nextInt();

        prime = new boolean[n+1];
        prime[1] = true;
        for(int i=2;i<=n;i++){
            prime[i] = isPrime(i);
        }

        mem = new int[k+1][n+1];
        for(int []i : mem)
            Arrays.fill(i, -1);

        int ret = 0;
        for(int i=n;i>0;i--) {
            // System.out.println(k + " " + i + " " + dp(k, i)); 
            ret+=dp(k, i);
            if (ret >= MOD) ret-=MOD;
        }

        out.println(ret);
        // System.out.println("----------------");
        // for(int i=1;i<=k;i++){
        //     for(int j=1;j<=n;j++){
        //         System.out.print(mem[i][j] + " ");
        //     }
        //     System.out.println();
        // }

        out.close();	
    }

    private boolean isPrime(int x) {
        if (x % 2 == 0) return false;
        for(int i=3;i*i<=x;i+=2)
            if(x % i == 0)
                return false;
        return true;
    }

    private int dp(int n, int s) {
        
        if (mem[n][s] != -1)
            return mem[n][s];
        
        if (n == 1 || s == 1)
            return mem[n][s] = 1;
        
        // if (isPrime(s))
        //     return mem[n][s] = n;

        int ret = 0;
        for(int i=1;i*i<=s;i++){
            if (s % i == 0) {
                ret+=dp(n-1, s/i);
                if (ret >= MOD) ret-=MOD;
                if (s / i != i) {
                    ret+=dp(n-1, i);
                    if (ret >= MOD) ret-=MOD;
                }
            }
        }

        mem[n][s] = ret;
        return mem[n][s];
    }

    public static void main(String args[]) throws Exception{
	   new Main().run();
    }
}