#include <bits/stdc++.h>
#include <atcoder/all>
using namespace std;
using namespace atcoder;
//const long nPrime = 1000000007;
//const long nPrime = 998244353;
typedef long long ll;
int main() {
    ll n;
    cin >> n;
    map<ll, ll> miAns;
    miAns.insert(make_pair(1,0));
    for(ll i = 0; i < n-1; i++){
        ll x;
        cin >> x;
        auto itr = miAns.lower_bound(i+1);
        ll k = itr->second+1;
        auto itr2 = miAns.lower_bound(x);
        if(itr2 == miAns.end() || itr2->second > k){
            if(itr2->first == x){
                miAns.erase(itr2);
            }
            miAns.insert(make_pair(x,k));
            auto itr3 = miAns.find(x);
            if(itr3 != miAns.begin()){
                itr3--;
                while(itr3->second >= k){
                    miAns.erase(itr3++);
                    if(itr3 == miAns.begin()){
                        break;
                    }
                    itr3--;
                }
            }
        }
    }
    
    cout << miAns.find(n)->second <<endl;
    return 0;
}