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.Arrays;
import java.util.Scanner;

public class MashmokhAndACM 
{

	public static void main(String[] args) 
	{
		Scanner sc = new Scanner(System.in);
		
		/*
		int tok = 2000;
		boolean[] sieve = new boolean[tok+1];
		sieve[0] = true;
		sieve[1] = true;
		{
			for(int i = 2; i <= tok; i++)
			{
				if(!sieve[i])
					for(int j = i*i; j <= tok; j+= i)
					{
						sieve[j] = true;
					}
			}
		}
		
		int pc = 0;
		int p[] = new int[303];
		for(int i = 0; i < 2000; i++)
		{
			if(!sieve[i])
			{
				p[pc] = i;
				pc++;
			}
		}
		System.out.println(pc);
		System.out.println(Arrays.toString(p));
		*/
		
		
		int n = sc.nextInt();
		int k = sc.nextInt();
		
		long MOD = 1000000007;
		
		long[][] dp = new long[n+1][k+1];
//		System.out.println("Arr " + n + " " + k);
		
		int count = 0;
		for(int i = n; i >= 1; i--)
		{
//			System.out.println("i = " + i);
			dp[i][k] = 1;
			
			for(int dig = k-1; dig >= 0; dig--)
			{
				for(int mul = 1; i * mul <= n; mul++)
				{
					int next = i * mul;
					count++;
//					System.out.println("i dig next " + i + " " + dig + " " + next);
					
					dp[i][dig] = (dp[i][dig] + dp[next][dig+1])%MOD;
				}
				
			}
			
			
		}
//		System.out.println("COUNT " + count%MOD);
		
		/*
		for(int j = 0; j <= k; j++)
		{
			for(int i = 0; i <= n; i++)
			{
//				System.out.print(dp[i][j] + " ");
			}
//			System.out.print("\n");
		}
		*/
		
		
		System.out.println(dp[1][0]);
	}

}