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.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.StringTokenizer;


public class R240TDMashmokhAndAcm {

	static long dp[][];
	static long mod = (long)(1e9 + 7);
	
	@SuppressWarnings("unchecked")
	public static void main(String args[] ) throws Exception {
		   
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	    PrintWriter w = new PrintWriter(System.out);
	    
	    /*
	    int count = 0;
	    for(int i=1;i<=2000;i++){
	    	for(int j=1;j<=i;j++){
	    		if(i % j == 0)
	    			count++;
	    	}
	    }
	    System.out.println(count * 2000);
	    */
	    
	    ArrayList<Integer>[] divisors = new ArrayList[2001];
	    for(int i=1;i<=2000;i++)
	    	divisors[i] = new ArrayList<Integer>();
	    
	    for(int i=1;i<=2000;i++){
	    	for(int j=1;j*j<=i;j++){
	    		if(i % j == 0){
	    			divisors[i].add(j);
	    			if(i/j != j)
	    				divisors[i].add(i/j);
	    		}
	    	}
	    }
	    
	    StringTokenizer st1 = new StringTokenizer(br.readLine());
	    int n = ip(st1.nextToken());
		int k = ip(st1.nextToken());
	    
		dp = new long[k][n+1];
		Arrays.fill(dp[k-1], 1);
		
		for(int i=k-2;i>=0;i--){
			for(int j=1;j<=n;j++){
				int s = divisors[j].size();
				for(int c=0;c<s;c++){
					int d = divisors[j].get(c);
					dp[i][d] += dp[i+1][j];
				}
			}
			for(int j=1;j<=n;j++)
				dp[i][j] %= mod;
		}
		
		long ans = 0;
		for(int i=1;i<=n;i++)
			ans += dp[0][i];
		ans %= mod;
		w.println(ans);
	    w.close(); 
	}
	
	public static int ip(String s){
		return Integer.parseInt(s);
	}
}