using System; using System.Collections; using System.Collections.Generic; using System.Collections.Specialized; using System.Text; using System.Text.RegularExpressions; using System.Linq; using System.IO; class Program { static private Magatro M = new Magatro(); static private void Main(string[]args) { M.Scan(); M.Solve(); } } public class Scanner { private string[] S; private int Index; private char Separator; public Scanner(char separator = ' ') { Index = 0; Separator = separator; } private string[] Line() { return Console.ReadLine().Split(Separator); } public string Next() { string result; if (S == null || Index >= S.Length) { S = Line(); Index = 0; } result = S[Index]; Index++; return result; } public int NextInt() { return int.Parse(Next()); } public double NextDouble() { return double.Parse(Next()); } public long NextLong() { return long.Parse(Next()); } } public class Magatro { private long N; private int M; private const int Mod = 1000000000; public void Scan() { Scanner sc = new Scanner(); N = sc.NextLong()/1000; M = sc.NextInt(); } public void Solve() { N %= M; Console.WriteLine(Conbination()); } private long Conbination() { List[] TryAngle = new List[M + 1]; TryAngle[0] = new List(); TryAngle[0].Add(1); for(int i = 1; i <= M; i++) { TryAngle[i] = new List(); for(int j = 0; j < TryAngle[i - 1].Count+1; j++) { if (j == 0||j==TryAngle[i-1].Count) { TryAngle[i].Add(1); } else { TryAngle[i].Add((TryAngle[i - 1][j - 1] + TryAngle[i - 1][j])%Mod); } } } return TryAngle[M][(int)N]; } }