#include <bits/stdc++.h>
using namespace std;
const long long N = 5e5 + 5;
long long n, mx;
long long a[N], ans;
vector<long long> v[N];
long long c[N];
long long lowbit(long long x) { return x & (-x); }
void modify(long long x, long long k) {
  while (x <= n) c[x] += k, x += lowbit(x);
}
long long query(long long x) {
  long long ans = 0;
  while (x) ans += c[x], x -= lowbit(x);
  return ans;
}
long long find_next(long long x, long long pos) {
  long long t = lower_bound(v[x].begin(), v[x].end(), pos) - v[x].begin();
  if (t == v[x].size()) t = 0;
  return t;
}
void add(long long x, long long y) {
  if (x <= y)
    ans += query(y) - query(x - 1);
  else
    ans += query(n) - query(x - 1) + query(y);
}
int main() {
  cin >> n;
  for (long long i = 1; i <= n; i++) {
    cin >> a[i];
    v[a[i]].push_back(i);
    mx = max(mx, a[i]);
    modify(i, 1);
  }
  long long nw = 0;
  for (long long x = 1; x <= mx; x++) {
    long long siz = v[x].size();
    if (!siz) continue;
    long long t = find_next(x, nw);
    add(nw + 1, v[x][t]);
    if (v[x].size() >= 2) {
      long long tt = t - 1;
      if (tt == -1) tt = v[x].size() - 1;
      add(v[x][t] + 1, v[x][tt]);
      nw = v[x][tt];
    } else
      nw = v[x][t];
    for (long long i = 0; i < v[x].size(); i++) modify(v[x][i], -1);
  }
  cout << ans;
}
