#include <bits/stdc++.h>
using namespace std;
long long n = 1000005;
vector<long long> pos, neg, dp;
stack<long long> stkPos, stkNeg;
long long solve() {
  dp[n - 1] = 0;
  stkPos.push(n - 1);
  stkNeg.push(n - 1);
  long long temp;
  for (long long i = n - 2; i >= 0; i--) {
    dp[i] = n - 1;
    while (!stkPos.empty() && pos[stkPos.top()] < pos[i]) {
      temp = stkPos.top();
      dp[i] = min(dp[i], dp[temp] + 1);
      stkPos.pop();
    }
    if (!stkPos.empty()) {
      dp[i] = min(dp[i], dp[stkPos.top()] + 1);
      while (!stkPos.empty() && pos[stkPos.top()] == pos[i]) stkPos.pop();
    }
    stkPos.push(i);
    while (!stkNeg.empty() && neg[stkNeg.top()] < neg[i]) {
      temp = stkNeg.top();
      dp[i] = min(dp[i], dp[temp] + 1);
      stkNeg.pop();
    }
    if (!stkNeg.empty()) {
      dp[i] = min(dp[i], dp[stkNeg.top()] + 1);
      while (!stkNeg.empty() && neg[stkNeg.top()] == neg[i]) stkNeg.pop();
    }
    stkNeg.push(i);
  }
  return dp[0];
}
signed main() {
  cin >> n;
  pos.resize(n);
  neg.resize(n);
  dp.resize(n);
  for (long long i = 0; i < n; i++) {
    cin >> pos[i];
    neg[i] = -pos[i];
  }
  long long minJumps = solve();
  cout << minJumps << endl;
}
