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.math.BigInteger;
import java.time.Clock;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Scanner;

/**
 * Created by TU on 4/7/2017.
 */
public class Problem414B {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = Integer.parseInt(sc.next());
        int k = Integer.parseInt(sc.next());
        Date start = new Date();
        HashMap<Integer, ArrayList<Integer>> factors = new HashMap<>();
        for (int i = 1; i <= n; i++) {
            for (int j = 2*i; j <= n; j += i) {
                if (!factors.containsKey(j)) factors.put(j, new ArrayList<>());
                factors.get(j).add(i);
            }
        }
        int modulo = 1000000007;

//        Date process = new Date();
//        long diff = process.getTime() - start.getTime();
//        System.out.println("Hash " + diff);

        long[] results = new long[n+1];
        for (int i = 1; i <= n; i++) {
            results[i] = 1;
        }
        long[] tempResult = new long[n+1];

        for (int i = 2; i <= k; i++) {
            for (int j = 1; j <= n; j++) {
                tempResult[j] = 0;
            }
            for (int j = n; j > 1; j--) {
                for (int factor:
                     factors.get(j)) {
                    tempResult[factor] += results[j];
                    tempResult[factor] %= modulo;
                }
            }

            for (int j = 1; j <= n; j++) {
                results[j] += tempResult[j];
                results[j] %= modulo;
            }

//            for (int j = 1; j <= n; j++) {
//                System.out.print(results[j] + " ");
//            }
//            System.out.println();
        }

//        Date result1 = new Date();
//        diff = result1.getTime() - process.getTime();
//        System.out.println("Process " + diff);

        long sum = 0;

        for (int i = 1; i <= n; i++) {
            sum += results[i];
            sum %= modulo;
        }
//        Date result2 = new Date();
//        diff = result2.getTime() - result1.getTime();
//        System.out.println("Sum " + diff);

        System.out.println(sum);
    }
}