#include <iostream>
using namespace std;
typedef long long ll;
// nCk = n! / [(n - k)! * k!]
// Cách tính nCk đã giới thiệu ở buổi trước:
// - Áp dụng khi bài có nhiều truy vấn nCk
// - Do phải khai báo 2 mảng để lưu nên áp dụng được cho những bài có giới hạn đủ để đặt mảng
// - Độ phức tạp:
// + precompute: tính 2 mảng fact[], inv_fact[]: O(n)
// + tính nCk: O(1)
// Cách tính thứ 2:
// - Độ phức tạp O(k) cho mỗi truy vấn nCk
// - Áp dụng cho trường hợp n lớn, k nhỏ (n <= 10^9, k <= 10^6)
const int MOD = 1e9 + 7;
ll binpow(ll a, ll b) {
ll ans = 1;
for (; b > 0; b >>= 1) {
if (b & 1) ans = ans * a % MOD;
a = a * a % MOD;
}
return ans;
}
ll inv(int i) {
return binpow(i, MOD - 2);
}
ll nCk(int n, int k) {
// nC0 = 1
ll ans = 1;
// O(k)
ll sum = 0;
for (int i = 1; i <= k; i++) {
ans = ans * (n - i + 1) % MOD * inv(i) % MOD;
}
return ans;
}
int main() {
ios::sync_with_stdio(0); cin.tie(0);
int n, k;
cin >> n >> k;
cout << nCk(n, k) << '\n';
}
I2luY2x1ZGUgPGlvc3RyZWFtPiAKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgCgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsgIAovLyBuQ2sgPSBuISAvIFsobiAtIGspISAqIGshXSAKCi8vIEPDoWNoIHTDrW5oIG5DayDEkcOjIGdp4bubaSB0aGnhu4d1IOG7nyBideG7lWkgdHLGsOG7m2M6ICAgCi8vIC0gw4FwIGThu6VuZyBraGkgYsOgaSBjw7Mgbmhp4buBdSB0cnV5IHbhuqVuIG5DayAgIAovLyAtIERvIHBo4bqjaSBraGFpIGLDoW8gMiBt4bqjbmcgxJHhu4MgbMawdSBuw6puIMOhcCBk4bulbmcgxJHGsOG7o2MgY2hvIG5o4buvbmcgYsOgaSBjw7MgZ2nhu5tpIGjhuqFuIMSR4bunIMSR4buDIMSR4bq3dCBt4bqjbmcgICAKLy8gLSDEkOG7mSBwaOG7qWMgdOG6oXA6IAoJIC8vICsgcHJlY29tcHV0ZTogdMOtbmggMiBt4bqjbmcgZmFjdFtdLCBpbnZfZmFjdFtdOiBPKG4pCgkgLy8gKyB0w61uaCBuQ2s6ICAgTygxKSAgICAgIAoKLy8gQ8OhY2ggdMOtbmggdGjhu6kgMjogCi8vIC0gxJDhu5kgcGjhu6ljIHThuqFwIE8oaykgY2hvIG3hu5dpIHRydXkgduG6pW4gbkNrICAgIAovLyAtIMOBcCBk4bulbmcgY2hvIHRyxrDhu51uZyBo4bujcCBuIGzhu5tuLCBrIG5o4buPIChuIDw9IDEwXjksIGsgPD0gMTBeNikgIAoKY29uc3QgaW50IE1PRCA9IDFlOSArIDc7ICAgCgpsbCBiaW5wb3cobGwgYSwgbGwgYikgewoJbGwgYW5zID0gMTsgIAoJZm9yICg7IGIgPiAwOyBiID4+PSAxKSB7CgkJaWYgKGIgJiAxKSBhbnMgPSBhbnMgKiBhICUgTU9EOyAKCQlhID0gYSAqIGEgJSBNT0Q7IAoJfQoJcmV0dXJuIGFuczsgCn0KCmxsIGludihpbnQgaSkgewoJcmV0dXJuIGJpbnBvdyhpLCBNT0QgLSAyKTsgCn0KCmxsIG5DayhpbnQgbiwgaW50IGspIHsKCS8vIG5DMCA9IDEgICAKCWxsIGFucyA9IDE7CgkvLyBPKGspIAoJbGwgc3VtID0gMDsKCWZvciAoaW50IGkgPSAxOyBpIDw9IGs7IGkrKykgewoJCWFucyA9IGFucyAqIChuIC0gaSArIDEpICUgTU9EICogaW52KGkpICUgTU9EOyAgIAoJfQoJcmV0dXJuIGFuczsgIAp9CgppbnQgbWFpbigpIHsKCWlvczo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyAKCWludCBuLCBrOyAKCWNpbiA+PiBuID4+IGs7ICAKCWNvdXQgPDwgbkNrKG4sIGspIDw8ICdcbic7IAp9