#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define rep(i, a, b) for(int i=(a); i<(b); i++)
#define per(i, a, b) for(int i=(b)-1; i>=(a); i--)
#define sz(a) (int)a.size()
#define de(a) cout << #a << " = " << a << endl
#define dd(a) cout << #a << " = " << a << " "
#define all(a) a.begin(), a.end()
#define pw(x) (1ll<<(x))
#define endl "\n"
typedef double db;
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;
int a[100000 + 10];
int b[100000 + 10];
int cnt[100000 + 10];
map<int, int> vis1, vis2;
vi v1, v2;
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	//cout << setiosflags(ios::fixed);
	//cout << setprecision(2);
	int n;
	cin >> n;
	rep(i, 1, n + 1){
		cin >> a[i];
	}
	int sta = 1;
	b[1] = a[1];
	cnt[sta] = 1;
	int ans = 0;
	rep(i, 2, n + 1){
		if(a[i] == b[sta]) cnt[sta] ++;
		else {
			sta ++;
			b[sta] = a[i];
			cnt[sta] = 1;
		}
	}
	//int last = -1;
	// rep(i, 1, sta + 1){
	// 	if(vis[b[i]]) {
	// 		if(last != -1 ) v1.pb(last);
	// 		v1.pb(vis[b[i]]);
	// 		//cout << "!!" << i << endl;
	// 		last = i;
	// 		vis.clear();
	// 	}
	// 	vis[b[i]] = i;
	// }
	// //de(last);
	// if(last != -1) v1.pb(last);
	// for(auto i: v1) {
	// 	vis1[i] = true;
	// 	//de(i);
	// //	cout << i << " " ;
	// }
	// //cout << endl;
	// rep(i, 1, sta + 1) if(!vis1[i]) v2.pb(i);
	// if(sz(v1)) ans ++;
	// if(sz(v2)) ans ++;
	// rep(i, 1, sz(v1)){
	// 	if(b[v1[i]] != b[v1[i - 1]]) ans ++;
	// }
	// rep(i, 1, sz(v2)){
	// 	if(b[v2[i]] != b[v2[i - 1]]) ans ++;
	// }
	int fi = 1;
	rep(i, 1, sta + 1){
		if(vis1[b[i]]) {
			vis1.clear();
			if(i > 1) vis1[b[i - 1]] = 1;
			ans --;
		}
		vis1[b[i]] = i;
		//vis2[b[i]] = 1;
	}
	cout << sta + ans << endl;
	return 0;
}
/*
9
1 2 1 2 3 2 1 2 1 
*/