import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
/**
我们用f数组记录跳到每个台阶的方式总数,其中f[0]=1;
要跳到第一级台阶只能从底部直接跳,所以跳到第一级台阶的方式总数f[1]=f[0]=1;
要跳到第二级台阶能从底部直接跳或从第一级台阶往上跳,所以跳到第二级台阶的方式总数f[2]=f[0]+f[1]=1+1=2(这里约定k>2);
由此我们可以得出f[i]=f[0]+f[1]+...+fi-1(把i=k的情况放到后面去亦可);
要跳到第(k+1)级台阶可以从第1级至第k级出发;要跳到第(k+2)级台阶可以从第2级至第(k+1)级出发;
因此我们可以得到跳到第i级台阶可以从第(i-k)级至第(i-1)级出发,f[i]=f[i-k]+f[i-k+1]+...+fi-1.
*/
public class Main {
static int[] fn;
static int MOD=100003;
public static void main(String[] args) throws Exception{
BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st=new StringTokenizer(reader.readLine());
int N=Integer.parseInt(st.nextToken());
int K=Integer.parseInt(st.nextToken());//每次最多可以跨越的台阶数
if(K==1){
System.out.println(1);
return;
}
fn=new int[N+1];
fn[0]=1;
fn[1]=1;
for (int i = 2; i <K ; i++) {
for (int j = 0; j <i ; j++) {
fn[i]=(fn[i]+fn[j])%MOD;
}
}
for (int i=K;i<=N;i++) {//第二种分类
for (int j = i - K; j < i; j++) {
fn[i] = (fn[i] + fn[j]) % MOD;
}
}
System.out.printf("%d\n",fn[N]);
reader.close();
}
}