# def f(a, b):
# global memo
# if memo[a-1][b-1] != 0:
# return memo[a-1][b-1]
# if a == 1 or b == 1:
# memo[a-1][b-1] = 1
# return 1
# memo[a-1][b-1] = (f(a - 1, b) + f(a, b - 1)) % 100000000
# return memo[a-1][b-1]
#
#
# r, c = map(int, input().split())
# memo = []
# for i in range(r):
# v = [0] * c
# memo.append(v)
# print(f(r, c))
'''
Class ?
function(기능) + Variable(변수)
'''
import logging
# class student:
# def init(self, name, height, talkk):
# self.name = name
# self.height = height
# self.talkk = talkk
#
# def talk(self):
# self.x = 10
# print('Hello Im student', 'Im', self.name)
#
#
# x = student('Ike', 177, 'Hello')
# x.talk()
# n = int(input())
# d = list(map(int, input().split()))
# max = 0
# min = 1000
# for i in range(n):
# if d[i] > max:
# max = d[i]
# if d[i] < min:
# min = d[i]
# print(max-min)
# class save:
# def init(self, n, datas):
# self.n = n
# self.datas = datas
#
# def convert(self):
# for i in range(self.n):
# self.datas[i] = int(self.datas[i])
#
# def findMax(self):
#
#
# def findMin(self):
#
#
# n = int(input())
# data = input().split()
# x = save(n, data)
#
# x.convert()
# class a:
# def init(self, x, y):
# self.x = x
# self.y = y
#
# def null(self):
# if x[0] > y[2] or x[1] > y[3] or y[0] > x[2] or y[1] > x[3]:
# return 1
# return 0
#
# def point(self):
# if x[0] == y[2] and x[1] == y[3]:
# return 1
# if x[2] == y[0] and x[3] == y[1]:
# return 1
# if x[0] == y[2] and x[3] == y[1]:
# return 1
# if x[2] == y[0] and x[1] == y[3]:
# return 1
# return 0
#
# def line(self):
# if x[0] == y[2] or x[1] == y[3] or x[2] == y[0] or x[3] == y[1]:
# return 1
# return 0
#
#
# x = list(map(int, input().split()))
# y = list(map(int, input().split()))
# k = a(x, y)
#
# if k.null() == 1:
# print('NULL')
# else:
# if k.point() == 1:
# print('POINT')
# else:
# if k.line() == 1:
# print('LINE')
# else:
# print('FACE')
# class a:
# def init(self, d1, d2):
# self.d1 = d1
# self.d2 = d2
#
# def gcd(self, a, b):
# if a == 0:
# return b
# return x.gcd(b % a, a)
#
# def sum(self):
# su = 0
# for i in range(d1, d2 + 1, 1):
# su = su + i
# return su
#
# def count(self):
# s = 0
# for i in range(d1, d2, 1):
# for j in range(i + 1, d2 + 1, 1):
# s = s + x.gcd(i, j) - 1
# return s
#
#
# d1, d2 = map(int, input().split())
# x = a(d1, d2)
# sumd = x.sum()
# print(sumd - x.count() - d2 + d1)
# class a:
# def init(self, n, m):
# self.n = n
# self.m = m
#
# def f(self, k):
# if m[k] != 0:
# return m[k]
# if k == 1:
# m[k] = 1
# return 1
# if k == 2:
# m[k] = 2
# return 2
# m[k] = (x.f(k-1) + x.f(k - 2)) % 100000007
# return m[k]
#
#
# n = int(input())
# m = [0] * (n+2)
# x = a(n, m)
# print(x.f(n))
# import sys
# limit_number = 2000000
# sys.setrecursionlimit(limit_number)
#
# class recursion:
# def init(self, x):
# self.x = x
# self.data = [0] * 10002
#
# def execute(self, k):
# if self.data[k] != 0:
# return self.data[k]
# if k == 1:
# self.data[k] = 1
# return 1
# if k == 2:
# self.data[k] = 2
# return 2
# self.data[k] = (rec.execute(k-1) + rec.execute(k-2)) % 100000007
# return self.data[k]
#
#
# x = int(input())
# rec = recursion(x)
# print(rec.execute(x))
# class a:
# def init(self, n):
# self.n = n
#
# def f(self):
# s = 1
# for i in range(n//3):
# s = s * 2
# return s % 100000007
#
#
# n = int(input())
# x = a(n)
# if n % 3 != 0:
# print(0)
# else:
# print(x.f())
# n = int(input())
# d = list(map(int, input().split()))
# for i in range(n-1, -1, -1):
# print(d[i], end=' ')
# d = list(map(int, input()))
# for i in range(len(d)-1, -1, -1):
# print(d[i], end='')
# def f(a, b):
# if a == 0:
# return b
# return f(b % a, a)
#
#
# a, b = map(int, input().split())
# print(f(a, b))
def f(n, r):
global s
if r == 0:
return 1
f(n, r-1)
s = s * (n-r+1)
def g(n, r):
global s
if r == 0:
return
f(n, r-1)
s = s // r
s = 1
n, r = map(int, input().split())
f(n, r)
g(n, r)
print(s)