#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100100;
int N;
int ar[MAXN];
int kd[MAXN * 3];
stack<int> st;
int find(int k, int beg, int end, int a1, int a2) {
  if (a1 > end || a2 < beg) return 0;
  if (beg >= a1 && end <= a2) return kd[k];
  return max(find(k * 2, beg, (beg + end) / 2, a1, a2),
             find(k * 2 + 1, (beg + end) / 2 + 1, end, a1, a2));
}
int update(int k, int beg, int end, int a, int x) {
  if (a < beg || a > end) return kd[k];
  if (beg == end) return kd[k] = x;
  return kd[k] = max(update(k * 2, beg, (beg + end) / 2, a, x),
                     update(k * 2 + 1, (beg + end) / 2 + 1, end, a, x));
}
int main() {
  cin >> N;
  for (int i = 1; i <= N; i++) scanf(" %d", ar + i);
  for (int i = 1; i <= N; i++) {
    while (!st.empty() && ar[st.top()] < ar[i]) st.pop();
    bool skip = false;
    int x;
    if (st.empty())
      skip = true;
    else
      x = st.top();
    st.push(i);
    if (skip) continue;
    update(1, 1, N, i, find(1, 1, N, x + 1, i - 1) + 1);
  }
  cout << find(1, 1, N, 1, N) << endl;
  return 0;
}
