#include <bits/stdc++.h>
using namespace std;
int n, x[300005], ans, va[300005], vb[300005], ma[300005], mv[300005], ia, ib,
    maa;
bool g;
vector<int> v;
void go(bool add) {
  v = {0};
  for (int i = 1; i <= n; i++) {
    if (x[i] == 1) v.push_back(i);
  }
  v.push_back(n + 1);
  if (add) ans += v.size() - 2;
  memset(va, 0, sizeof(va));
  memset(vb, 0, sizeof(vb));
  for (int i = 1; i < v.size() - 1; i++) {
    ia = v[i - 1];
    for (int j = v[i] - 1; j > v[i - 1]; j--) {
      if (va[x[j]] > v[i - 1]) {
        ia = j;
        break;
      }
      va[x[j]] = j;
    }
    ib = v[i + 1];
    ma[v[i]] = 1;
    mv[v[i]] = 0;
    for (int j = v[i] + 1; j < v[i + 1]; j++) {
      if (vb[x[j]] == i) {
        ib = j;
        break;
      }
      ma[j] = max(ma[j - 1], x[j]);
      mv[j] = max(mv[j - 1], va[x[j]]);
      vb[x[j]] = i;
    }
    maa = 1;
    for (int j = v[i] - 1; j > ia; j--) {
      maa = max(maa, x[j]);
      int to = j + maa - 1;
      if (to >= v[i] && to < ib && ma[to] <= maa && mv[to] < j) ans++;
    }
  }
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", x + i);
  go(1);
  reverse(x + 1, x + n + 1);
  go(0);
  printf("%d\n", ans);
}
