#include <iostream>
#include <vector>
#include <utility>
#include <algorithm>
using namespace std;

#define INF 1e9

class SegmentTree{
public:
  SegmentTree(int size)
    : n(power2(size)),
      node(vector<long long int>(2 * n - 1, NEUTRAL()))
  {}
  
  SegmentTree(vector<long long int>& init){
    n = power2(init.size());
    node = vector<long long int>(2 * n - 1, NEUTRAL());
    
    // ????????????????????\??????????????????
    for(size_t i = 0; i < init.size(); i++){ node[n - 1 + i] = init[i]; }
    // ????????????????????£?????????
    for(int i = n - 2; i >= 0; i--){ node[i] = func(node[2 * i + 1], node[2 * i + 2]); }
  }

  // ???????????¨???
  long long int RangeQuery(int a, int b){ return _RQ(a, b, 0, 0, n); }

  // ??????????????????????????´
  void change(int index, long long int value){
    int k = n - 1 + index;
    node[k] = value;
    update((k - 1) / 2);
  }

  // ??¨????????? (???????????°??¨)
  void print(){
    int h = 1, cnt = 1;
    for(size_t i = 0; i < node.size(); i++){
      cout << "[" << node[i] << "]";
      if(h <= cnt){
        cout << endl;
        h *= 2;
        cnt = 0;
      }
      cnt++;
    }
  }

private:
  int n;
  vector<long long int> node;

  // ????????¢??°
  // ??????????°??????¨????????? min(x, y), ??????????????? x + y ??????
  long long int func(long long int x, long long int y){ return max(x, y); }
  // ?????????
  // ??????????°??????¨????????? ??¨??§?????°, ??????????????? 0 ??????
  long long int NEUTRAL(){ return 0; }
  
  // s??\?????§??????????°????2^n????±???????
  long long int power2(int s){
    int logs = 32 - __builtin_clz(s);
    return 1 << logs;
    //int count, ans = 1;
    //for(count = 0; s != 0; count++){ s /= 2; }
    //for(int i = 0; i < count; i++){ ans *= 2; }
    //return ans;
  }

  // [a, b)???????????§????????????????±??????????
  // ????????????[l, r)???????????§???????????????node[k]??§??????
  long long int _RQ(int a, int b, int k, int l, int r){
    // [l, r)???????????£??????[a, b)???????????£?????´?????????????????????????????????
    if(r <= a || b <= l){ return NEUTRAL(); }
    // [l, r)???????????£??????[a, b)??????????????????????????´????????????????????????????????????
    if(a <= l && r <= b){ return node[k]; }
    
    // 2????????????????????§????????????????????°???????±???????????????????????????????????????????
    long long int vl = _RQ(a, b, 2 * k + 1, l, (l + r) / 2);
    long long int vr = _RQ(a, b, 2 * k + 2, (l + r) / 2, r);
    return func(vl, vr);
  }

  // node[k]?????´??°
  void update(long long int k){
    if(k < 0){ return; }
    
    long long int prior = node[k];
    node[k] = func(node[2 * k + 1], node[2 * k + 2]);
    // ??´??°?????¨??????????????????????????£?????? or ??????????????§??´??°???????????£?????????
    // ????????????????????´??°??????????????????????????§return
    if(node[k] == prior || k <= 0){ return; }

    // ????????´??°???????????????????????°?¶???????
    update((k - 1) / 2);
  }
};



int main(void){
  int n;
  cin >> n;
  long long int sum = 0;
  long long int max_input = 0;
  vector<long long int> input(n); 
  for(int i = 0; i < n; i++){
    cin >> input[i];
    sum += input[i];
    max_input = max(max_input, input[i]);
  }

  SegmentTree taro(max_input + 1);

  for(int i = 0; i < n; i++){
    taro.change(input[i], taro.RangeQuery(0, input[i]) + input[i]);
  }

  cout << sum - taro.RangeQuery(0, max_input + 1) << endl;
  return 0;
}