#include <bits/stdc++.h>
typedef struct stack {
  int sum;
  int step[100005];
  int num[100005];
} Stack;
Stack s;
void init(int *n, int *a) {
  int i;
  scanf("%d", n);
  for (i = 0; i < *n; i++) scanf("%d", a++);
  s.sum = 0;
}
void check(int tmp) {
  int tmp_step = 0, flag = 0, tmp_sum;
  tmp_sum = s.sum;
  while (s.sum > 0) {
    if (s.num[s.sum - 1] <= tmp) {
      tmp_step =
          s.step[s.sum - 1] + 1 > tmp_step ? s.step[s.sum - 1] + 1 : tmp_step;
      s.sum--;
      flag = 1;
    } else
      break;
  }
  if (flag) {
    if (s.sum == 0) {
      s.sum = tmp_sum;
      tmp_step = 0;
    }
  } else {
    if (s.sum > 0) tmp_step = 1;
  }
  s.num[s.sum] = tmp;
  s.step[s.sum] = tmp_step;
  s.sum++;
}
void search(int n, int *a) {
  int i, max = 0;
  for (i = 0; i < n; i++) {
    check(a[i]);
  }
  i = s.sum;
  while (i--) {
    max = max > s.step[i] ? max : s.step[i];
  }
  printf("%d\n", max);
}
int main(void) {
  int n, a[100005];
  init(&n, a);
  search(n, a);
}
