#include <bits/stdc++.h>
using namespace std;
vector<int> BIT(100005, 0);
vector<pair<int, int> > inputArray;
set<int> tempSet;
map<int, vector<int> > mapa;
void update(int position, int value) {
  for (int i = position; i < 100005; i += (i & (-i))) BIT[i] += value;
}
long long query(int position) {
  long long res = 0;
  for (int i = position; i > 0; i -= (i & (-i))) res += BIT[i];
  return res;
}
int main() {
  int n;
  cin >> n;
  inputArray.push_back(make_pair(0, 0));
  for (int i = 0; i < n; i++) {
    int tempNumber;
    cin >> tempNumber;
    mapa[tempNumber].push_back(i + 1);
    tempSet.insert(tempNumber);
  }
  for (auto it = tempSet.begin(); it != tempSet.end(); it++) {
    vector<int> &tempVector = mapa[*it];
    int position = (upper_bound(tempVector.begin(), tempVector.end(),
                                inputArray.back().second) -
                    tempVector.begin());
    for (int i = position; i < tempVector.size(); i++)
      inputArray.push_back(make_pair(*it, tempVector[i]));
    for (int i = 0; i < position; i++)
      inputArray.push_back(make_pair(*it, tempVector[i]));
  }
  long long sol(0);
  for (int i = 1; i <= n; i++) {
    sol += query(inputArray[i].second) + 1;
    if (inputArray[i].second > inputArray[i - 1].second) {
      update(inputArray[i - 1].second + 1, 1);
      update(inputArray[i].second, -1);
    } else {
      update(inputArray[i - 1].second + 1, 1);
      update(1, 1);
      update(inputArray[i].second, -1);
    }
  }
  cout << sol << endl;
  return 0;
}
