#include <vector>
#include <iostream>
#include <algorithm>
#pragma GCC target("avx2")
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
using namespace std;
int inc[102400];
int main() {
	cin.tie(0);
	ios_base::sync_with_stdio(false);
	int N;
	cin >> N;
	vector<int> A(N);
	for(int i = 0; i < N; ++i) {
		cin >> A[i];
		--A[i];
	}
	vector<vector<int> > G(N);
	for(int i = 0; i < N; ++i) {
		G[A[i]].push_back(i);
	}
	for(int i = 0; i < N; ++i) {
		inc[i] = i;
	}
	long long ans = 1LL * N * (N + 1) / 2;
	long long cursum = 1LL * N * (N - 1) / 2;
	for(int i = 0; i < N; ++i) {
		int ini = 0;
		for(int j = 0; j < int(G[i].size()); ++j) {
			int t = G[i][j];
			for(int k = ini; k < t; ++k) {
				if(inc[k] < t) {
					cursum += t - inc[k];
					inc[k] = t;
				}
				else break;
			}
			ini = t + 1;
		}
		for(int j = ini; j < N; ++j) {
			if(inc[j] < N) {
				cursum += N - inc[j];
				inc[j] = N;
			}
		}
		ans += 1LL * N * N - cursum;
	}
	cout << ans << endl;
	return 0;
}