#include <bits/stdc++.h>
using namespace std;
long long int power(long long int x, unsigned long long int y) {
  long long int res = 1;
  while (y > 0) {
    if (y & 1) {
      res = res * x;
    }
    y = y >> 1;
    x = x * x;
  }
  return res;
}
long long int powermod(long long int x, unsigned long long int y,
                       long long int p) {
  long long int res = 1;
  x = x % p;
  while (y > 0) {
    if (y & 1) {
      res = (res * x) % p;
    }
    y = y >> 1;
    x = (x * x) % p;
  }
  return res;
}
vector<long long int> v[300005];
int32_t main() {
  long long int n;
  cin >> n;
  vector<long long int> a(n);
  for (long long int i = (long long int)(0); i < (long long int)(n); i++)
    cin >> a[i];
  stack<long long int> low, high;
  low.push(0), high.push(0);
  for (long long int i = (long long int)(1); i < (long long int)(n); i++) {
    while (!low.empty() and a[i] >= a[low.top()]) {
      v[i].push_back(low.top());
      low.pop();
    }
    low.push(i);
    while (!high.empty() and a[i] <= a[high.top()]) {
      v[i].push_back(high.top());
      high.pop();
    }
    high.push(i);
  }
  while (!low.empty()) low.pop();
  while (!high.empty()) high.pop();
  low.push(n - 1), high.push(n - 1);
  for (long long int i = (long long int)(n - 2); i >= (long long int)(0); i--) {
    while (!high.empty() and a[i] <= a[high.top()]) {
      v[high.top()].push_back(i);
      high.pop();
    }
    high.push(i);
    while (!low.empty() and a[i] >= a[low.top()]) {
      v[low.top()].push_back(i);
      low.pop();
    }
    low.push(i);
  }
  long long int dp[n + 1];
  for (long long int i = (long long int)(0); i < (long long int)(n + 1); i++)
    dp[i] = 1e18;
  dp[0] = 0;
  for (long long int i = (long long int)(1); i < (long long int)(n); i++) {
    for (auto &val : v[i]) {
      dp[i] = min(dp[i], dp[val] + 1);
      dp[i] = min(dp[i], dp[i - 1] + 1);
    }
  }
  cout << dp[n - 1] << "\n";
  return 0;
}
