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


public class B
{
        String line;
        StringTokenizer inputParser;
        BufferedReader is;
        FileInputStream fstream;
        DataInputStream in;
        String FInput="";
        
        void openInput(String file)
        {

                if(file==null)is = new BufferedReader(new InputStreamReader(System.in));//stdin
                else
                {
                        try{
                
                                
                        fstream = new FileInputStream(file);
                        in = new DataInputStream(fstream);
                        is = new BufferedReader(new InputStreamReader(in));
                        }catch(Exception e)
                        {
                                System.err.println(e);
                        }
                }

        }
        
        void readNextLine()
    	{
    		try {
    			line = is.readLine();
    			inputParser = new StringTokenizer(line, " ,\t");
    			//System.err.println("Input: " + line);
    		} catch (IOException e) {
    			System.err.println("Unexpected IO ERROR: " + e);
    		}	
    		catch (NullPointerException e)
    		{
    			line=null;
    			
    		}
    		
    	}
        
        long NextLong()
        {
                String n = inputParser.nextToken();
                
                long val = Long.parseLong(n);
                
                 return val;
        }
        
        int NextInt()
        {
                String n = inputParser.nextToken();
                int val = Integer.parseInt(n);
                
                //System.out.println("I read this number: " + val);
                return val;
        }
        
        String NextString()
        {
                String n = inputParser.nextToken();
                return n;
        }
        
        void closeInput()
        {
                try {
                        is.close();
                } catch (IOException e) {
                        System.err.println("Unexpected IO ERROR: " + e);
                }
                        
        }
        
        
        public static void main(String [] argv)
        {
                //String filePath="circles.in";
                String filePath=null;
                if(argv.length>0)filePath=argv[0];
                new B(filePath);
                
        }
        //585712681
        public B(String inputFile)
        {
        	long t=System.currentTimeMillis();
        	openInput(inputFile);
    		StringBuilder sb = new StringBuilder();
    		readNextLine();
    		int N=NextInt();
    		int K=NextInt();
    		
    		int [] [] p = new int [N+1][K];
    		final int MOD=1000000007;
    		for(int i=1; i<=N; i++)
    		{
    			p[i][0]=1;
    		}
    		
    		L[] xx = new L[N+1];
    		for(int i=0; i<=N; i++)
    		{
    			xx[i]=new L();
    			for(int j=1; j*j<=i; j++)
    				if(i%j==0)
    				{
    					xx[i].x.add(j);
    					xx[i].x.add(i/j);
    				}
    		}
    		
    		
    		for(int i=1; i<K; i++)
    		{
    			for(int k=1; k<=N; k++)
    			{	
	    			for(int j:xx[k].x)
	    				{
	    					p[k][i]+=p[j][i-1];
	    					p[k][i]%=MOD;
	    				}
    			}
    		}
    		
    		long ret=0;
    		for(int i=0; i<=N; i++)
    		{
    			ret+=p[i][K-1];
    			
    		}
    		ret%=MOD;
        	System.out.println(ret);
        	System.err.println(System.currentTimeMillis()-t);
    		closeInput();			
      
        }
        
        private class L
        {
        	TreeSet<Integer>x = new TreeSet<Integer>();
        }
}