#include <bits/stdc++.h>
using namespace std;
void upi(long long &_a, long long _b) { _a = min(_a, _b); }
void upa(long long &_a, long long _b) { _a = max(_a, _b); }
const long long nmax = 5e5 + 7;
long long n, a[nmax], f[nmax], res(0);
stack<long long> st;
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(NULL);
  cout.tie(NULL);
  cin >> n;
  for (long long i = 1; i <= n; i++) cin >> a[i];
  st.push(n);
  for (long long i = n - 1; i > 0; i--) {
    if (st.size() && a[i] > a[st.top()]) {
      f[i] = max(f[i], max(f[st.top()], 1LL));
      st.pop();
    }
    while (st.size() && a[i] > a[st.top()]) {
      f[i] = max(f[i] + 1, f[st.top()]);
      st.pop();
    }
    st.push(i);
  }
  while (st.size()) res = max(res, f[st.top()]), st.pop();
  cout << res;
}
