#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
#define TEST
const int INF = 2e9;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N{}, M{};
cin >> N >> M;
vector<int> poles(N);
for (int i = 0; i < N; i++) {
cin >> poles[i];
poles[i] -= (i+1)*M;
}
reverse(poles.begin(), poles.end());
//longest non-decreasing subsequence
vector<int> dp(N+1,INF); // d_i(j)
dp[0] = -INF;
for (int i = 0; i < N; i++) {
int pos =upper_bound(dp.begin(), dp.end(), poles[i]) - dp.begin();
dp[pos]=poles[i];
}
int len= lower_bound(dp.begin(), dp.end(), 0) - dp.begin();
cout << N-(len-1) << "\n";
/*
for (int i = 0 ; i< N; i++) {
cerr << poles[i] << " ";
}
cerr << "\n";
for (int i = 1 ; i<= N; i++) {
cerr << dp[i] << " ";
}
cerr << "\n";
*/
return 0;
}