/*
Cred : SunnyYeahBoi
It's my last chance (⌐■_■)
Problem :
*/
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define double long double
#define endl "\n"
#define NAME "a"
const int MAXN = 1e5 + 5;
const int inf = 1e18;
const int MOD = 1e9;
void FileInput(){
if(fopen(NAME".inp" , "r") == NULL)
freopen(NAME".inp" , "w" , stdout);
freopen(NAME".inp" , "r" , stdin);
freopen(NAME".out" , "w" , stdout);
}
const int MAXK = 15;
int n , k;
int a[MAXN];
int cnt[MAXN];
int f[MAXN][MAXK];
struct Segtree{
vector<int> tree;
int n;
void init(int x){
n = x + 1;
tree.resize(4 * n + 1 , 0);
}
void update(int vt , int l , int r , int x , int y){
if(l == r){
tree[vt] += y;
tree[vt] %= MOD;
return;
}
int mid = (l + r) / 2;
if(x <= mid)
update(vt * 2 , l , mid , x , y);
else update(vt * 2 + 1 , mid + 1 , r , x , y);
tree[vt] = tree[vt * 2] + tree[vt * 2 + 1];
}
void update(int x , int y){
update(1 , 1 , n , x , y);
}
int get(int vt , int l , int r , int u , int v){
if(u <= l && r <= v)
return tree[vt];
if(l > v || r < u)
return 0;
int mid = (l + r) / 2;
return (get(vt * 2 , l , mid , u , v) + get(vt * 2 + 1 , mid + 1 , r , u , v)) % MOD;
}
int get(int l , int r){
return get( 1 , 1 , n , l , r);
}
} ST[MAXK];
void solve(){
cin >> n >> k;
for(int i = 1 ; i <= n ; i++)
cin >> a[i];
map<int , int> mp;
for(int i = 1 ; i <= n ; i ++)
mp[a[i]]++;
mp[-inf];
vector<int> nums;
for(auto x : mp)
nums.push_back(x.first);
// for(auto x : nums)
// cout << x << endl;
for(int i = 1 ; i <= k ; i++)
ST[i].init(n);
for(int i = 1 ; i <= n ; i++)
f[i][1] = 1;
for(int j = 2 ; j <= k ; j++){
for(int i = 1 ; i <= n ; i++){
int id = lower_bound(nums.begin() , nums.end() , a[i]) - nums.begin();
f[i][j] = ST[j - 1].get(id + 1 , (int)nums.size() - 1) % MOD;
ST[j - 1].update(id , f[i][j - 1]);
}
}
int res = 0;
for(int i = 1; i <= n ; i++)
res = (res + f[i][k]) % MOD;
cout << res << endl;
}
int32_t main(){
//FileInput();
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int t = 1;
// cin >> t;
while(t--)
solve();
return 0;
}
LyoKICAgIENyZWQgOiBTdW5ueVllYWhCb2kKICAgIEl0J3MgbXkgbGFzdCBjaGFuY2UgKOKMkOKWoF/ilqApCiAgICBQcm9ibGVtIDoKKi8KCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBpbnQgbG9uZyBsb25nCiNkZWZpbmUgZG91YmxlIGxvbmcgZG91YmxlCiNkZWZpbmUgZW5kbCAiXG4iCiNkZWZpbmUgTkFNRSAiYSIKCmNvbnN0IGludCBNQVhOID0gMWU1ICsgNTsKY29uc3QgaW50IGluZiA9IDFlMTg7CmNvbnN0IGludCBNT0QgPSAxZTk7Cgp2b2lkIEZpbGVJbnB1dCgpewogICAgaWYoZm9wZW4oTkFNRSIuaW5wIiAsICJyIikgPT0gTlVMTCkKICAgICAgICBmcmVvcGVuKE5BTUUiLmlucCIgLCAidyIgLCBzdGRvdXQpOwogICAgZnJlb3BlbihOQU1FIi5pbnAiICwgInIiICwgc3RkaW4pOwogICAgZnJlb3BlbihOQU1FIi5vdXQiICwgInciICwgc3Rkb3V0KTsKfQoKY29uc3QgaW50IE1BWEsgPSAxNTsKCmludCBuICwgazsKaW50IGFbTUFYTl07CmludCBjbnRbTUFYTl07CmludCBmW01BWE5dW01BWEtdOwoKc3RydWN0IFNlZ3RyZWV7CiAgICB2ZWN0b3I8aW50PiB0cmVlOwogICAgaW50IG47CgogICAgdm9pZCBpbml0KGludCB4KXsKICAgICAgICBuID0geCArIDE7CiAgICAgICAgdHJlZS5yZXNpemUoNCAqIG4gKyAxICwgMCk7CiAgICB9CgogICAgdm9pZCB1cGRhdGUoaW50IHZ0ICwgaW50IGwgLCBpbnQgciAsIGludCB4ICwgaW50IHkpewogICAgICAgIGlmKGwgPT0gcil7CiAgICAgICAgICAgIHRyZWVbdnRdICs9IHk7CiAgICAgICAgICAgIHRyZWVbdnRdICU9IE1PRDsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpbnQgbWlkID0gKGwgKyByKSAvIDI7CgogICAgICAgIGlmKHggPD0gbWlkKQogICAgICAgICAgICB1cGRhdGUodnQgKiAyICwgbCAsIG1pZCAsIHggLCB5KTsKICAgICAgICBlbHNlIHVwZGF0ZSh2dCAqIDIgKyAxICwgbWlkICsgMSAsIHIgLCB4ICwgeSk7CgogICAgICAgIHRyZWVbdnRdID0gdHJlZVt2dCAqIDJdICsgdHJlZVt2dCAqIDIgKyAxXTsKICAgIH0KCiAgICB2b2lkIHVwZGF0ZShpbnQgeCAsIGludCB5KXsKICAgICAgICB1cGRhdGUoMSAsIDEgLCBuICwgeCAsIHkpOwogICAgfQoKICAgIGludCBnZXQoaW50IHZ0ICwgaW50IGwgLCBpbnQgciAsIGludCB1ICwgaW50IHYpewogICAgICAgIGlmKHUgPD0gbCAmJiByIDw9IHYpCiAgICAgICAgICAgIHJldHVybiB0cmVlW3Z0XTsKCiAgICAgICAgaWYobCA+IHYgfHwgciA8IHUpCiAgICAgICAgICAgIHJldHVybiAwOwoKICAgICAgICBpbnQgbWlkID0gKGwgKyByKSAvIDI7CiAgICAgICAgcmV0dXJuIChnZXQodnQgKiAyICwgbCAsIG1pZCAsIHUgLCB2KSArIGdldCh2dCAqIDIgKyAxICwgbWlkICsgMSAsIHIgLCB1ICwgdikpICUgTU9EOwogICAgfQoKICAgIGludCBnZXQoaW50IGwgLCBpbnQgcil7CiAgICAgICAgcmV0dXJuIGdldCggMSAsIDEgLCBuICwgbCAsIHIpOwogICAgfQp9IFNUW01BWEtdOwoKdm9pZCBzb2x2ZSgpewogICAgY2luID4+IG4gPj4gazsKICAgIGZvcihpbnQgaSA9IDEgOyBpIDw9IG4gOyBpKyspCiAgICAgICAgY2luID4+IGFbaV07CgogICAgbWFwPGludCAsIGludD4gbXA7CiAgICBmb3IoaW50IGkgPSAxIDsgaSA8PSBuIDsgaSArKykKICAgICAgICBtcFthW2ldXSsrOwogICAgbXBbLWluZl07CiAgICAKICAgIHZlY3RvcjxpbnQ+IG51bXM7CiAgICBmb3IoYXV0byB4IDogbXApCiAgICAgICAgbnVtcy5wdXNoX2JhY2soeC5maXJzdCk7CgogICAgLy8gZm9yKGF1dG8geCA6IG51bXMpCiAgICAvLyAgICAgY291dCA8PCB4IDw8IGVuZGw7CgogICAgZm9yKGludCBpID0gMSA7IGkgPD0gayA7IGkrKykKICAgICAgICBTVFtpXS5pbml0KG4pOwoKICAgIGZvcihpbnQgaSA9IDEgOyBpIDw9IG4gOyBpKyspCiAgICAgICAgZltpXVsxXSA9IDE7CgogICAgZm9yKGludCBqID0gMiA7IGogPD0gayA7IGorKyl7CiAgICAgICAgZm9yKGludCBpID0gMSA7IGkgPD0gbiA7IGkrKyl7CiAgICAgICAgICAgIGludCBpZCA9IGxvd2VyX2JvdW5kKG51bXMuYmVnaW4oKSAsIG51bXMuZW5kKCkgLCBhW2ldKSAtIG51bXMuYmVnaW4oKTsKICAgICAgICAgICAgZltpXVtqXSA9IFNUW2ogLSAxXS5nZXQoaWQgKyAxICwgKGludCludW1zLnNpemUoKSAtIDEpICUgTU9EOwogICAgICAgICAgICBTVFtqIC0gMV0udXBkYXRlKGlkICwgZltpXVtqIC0gMV0pOwogICAgICAgIH0KICAgIH0KCiAgICBpbnQgcmVzID0gMDsKICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbiA7IGkrKykKICAgICAgICByZXMgPSAocmVzICsgZltpXVtrXSkgJSBNT0Q7CiAgICBjb3V0IDw8IHJlcyA8PCBlbmRsOwp9CgppbnQzMl90IG1haW4oKXsKICAgIC8vRmlsZUlucHV0KCk7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApO2Npbi50aWUoMCk7Y291dC50aWUoMCk7CiAgICBpbnQgdCA9IDE7CiAgICAvLyBjaW4gPj4gdDsKICAgIHdoaWxlKHQtLSkKICAgICAgICBzb2x2ZSgpOwogICAgcmV0dXJuIDA7Cn0=