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 Task414B{
    public static Scanner in;
    public static PrintWriter out;
    public static final int MAXN = 2010, MOD = 1000000007;
    public static List<Integer> f(int a){
        List<Integer> ret = new ArrayList<Integer>();
        for(int i = 2; i <= (int)(Math.sqrt(a)); ++i){
            if(a % i == 0){
                ret.add(i);
                if(a / i != i)
                    ret.add(a / i);
            }
        }
        return ret;
    }
    public static void main(String[] args){
        in = new Scanner(System.in);
        out = new PrintWriter(System.out);
        int n, k;
        n = in.nextInt();
        k = in.nextInt();
        long[][] dp = new long[MAXN + 20][MAXN + 20];
        long[][] sum = new long[MAXN + 20][MAXN + 20];
        for(int i = 1; i < MAXN; ++i){
            dp[1][i] = 1;
            sum[1][i] = sum[1][i-1] + dp[1][i];
            dp[i][1] = i;
            sum[i][1] = dp[i][1];
        }
        List<List<Integer>> fact = new ArrayList<List<Integer>>();
        for(int i = 1; i < MAXN; ++i){
            fact.add(f(i));
        }
//		out.println(fact.get(3).get(0));

        for(int i = 2; i < 2001; ++i){
            for(int j = 2; j < 2001; ++j){
                dp[i][j] = dp[i - 1][j] + j;

                for(Integer z: fact.get(i-1)){
                    dp[i][j] += sum[z][j-1] - sum[z-1][j-1];
                }
                sum[i][j] = sum[i][j-1] + dp[i][j];
                sum[i][j] %= MOD;
                dp[i][j] %= MOD;
            }
        }
		/*
		for(int i = 1; i < 11; ++i, out.println()){
			for(int j = 1; j < 11; ++j){
				out.printf("%3d ", dp[i][j]);
			}
		}
		//*/
        out.println((dp[n][k] + MOD)%MOD);
        out.flush();
    }
}