#include <bits/stdc++.h>
using namespace std;
const long long int MAX = 1e5 + 5;
long long int N, A[MAX], s[4 * MAX];
pair<long long int, long long int> seg[4 * MAX];
vector<long long int> arr;
void update(long long int l, long long int r, long long int node,
            long long int pos) {
  if (l > pos || r < pos) return;
  if (l == r) {
    ++s[node];
    return;
  }
  long long int mid = (l + r) >> 1;
  update(l, mid, node << 1, pos);
  update(mid + 1, r, 1 | node << 1, pos);
  s[node] = s[node << 1] + s[1 | node << 1];
}
long long int query(long long int l, long long int r, long long int node,
                    long long int ql, long long int qr) {
  if (l >= ql && r <= qr) return s[node];
  if (l > qr || r < ql) return 0;
  long long int mid = (l + r) >> 1;
  return query(l, mid, node << 1, ql, qr) +
         query(mid + 1, r, 1 | node << 1, ql, qr);
}
void update_set(long long int l, long long int r, long long int node,
                long long int pos, long long int val) {
  if (l > pos || r < pos) return;
  if (l == r) {
    seg[node].first = val;
    seg[node].second = l;
    return;
  }
  long long int mid = (l + r) >> 1;
  update_set(l, mid, node << 1, pos, val);
  update_set(mid + 1, r, 1 | node << 1, pos, val);
  seg[node] = min(seg[node << 1], seg[1 | node << 1]);
}
pair<long long int, long long int> query_set(long long int l, long long int r,
                                             long long int node,
                                             long long int ql,
                                             long long int qr) {
  if (l >= ql && r <= qr) return seg[node];
  if (l > qr || r < ql) return {MAX, MAX};
  long long int mid = (l + r) >> 1;
  return min(query_set(l, mid, node << 1, ql, qr),
             query_set(mid + 1, r, 1 | node << 1, ql, qr));
}
void build(long long int l, long long int r, long long int node) {
  if (l == r) {
    seg[node].first = A[l];
    seg[node].second = l;
    return;
  }
  long long int mid = (l + r) >> 1;
  build(l, mid, node << 1);
  build(mid + 1, r, 1 | node << 1);
  seg[node] = min(seg[node << 1], seg[1 | node << 1]);
}
signed main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> N;
  for (long long int i = 1; i <= N; ++i) cin >> A[i];
  build(1, N, 1);
  long long int cur = query_set(1, N, 1, 1, N).second;
  long long int c = 0;
  while (true) {
    ++c;
    arr.push_back(cur);
    update_set(1, N, 1, cur, MAX);
    auto x = query_set(1, N, 1, cur, N);
    auto y = query_set(1, N, 1, 1, cur);
    if (c == N)
      break;
    else if (y.first < x.first)
      cur = y.second;
    else
      cur = x.second;
  }
  long long int pre = 0, ans = 0;
  for (auto it : arr) {
    long long int pos = it;
    if (pos > pre) {
      ans = ans + pos - pre - query(1, N, 1, pre + 1, pos - 1);
      pre = pos;
    } else {
      ans = ans + N - pre - query(1, N, 1, pre + 1, N) + pos -
            query(1, N, 1, 1, pos);
      pre = pos;
    }
    update(1, N, 1, pos);
  }
  cout << ans << endl;
}
