#include <bits/stdc++.h>
using  namespace std ;
int  n , a , m ;
set < int > inuse ;
vector < int > adj [111111] ;
int order [111111] ;
typedef pair < int , int > ii ;
#define P first
#define Q second
int main(){
    int  i , j, k, l , ans ;
    ans= 0 ; 
   while (  scanf("%d %d %d", &n , &a , &m) != EOF ) { ;
    ans = 0 ; inuse.clear() ;
    for ( i = 0 ; i < m ; i++)
    {
         scanf("%d",&order[i]);
         adj[ order[i] ].push_back(i) ;
    }
int cap = 0 ;
priority_queue < ii , vector  < ii > , less <ii> > pq ;
    for ( i = 0 ; i < m ; i++){
    
        int x = order[i] ;
        set < int > :: iterator fit ;
        fit = lower_bound ( inuse.begin() , inuse.end() , x) ;
        if( fit !=  inuse.end())  
        if( *fit == x )
        {
            vector < int > :: iterator it ;
            it = lower_bound( adj[x].begin() , adj[x].end() , i+1) ;
            if( it != adj[x].end())
            pq.push(ii(*it,x));
            else
            pq.push(ii(1e9,x)) ;
           // cout << i <<" found  "<<x << endl ;
            continue ;
        }

        if ( cap < n ){
            inuse.insert(x);
            ans++ ; cap++ ; 
            vector < int > :: iterator it ;
            it = lower_bound( adj[x].begin() , adj[x].end() , i+1) ;
            if( it != adj[x].end())
            pq.push(ii(*it,x)) ;
            else
            pq.push(ii(1e9,x)) ;
           // cout << i << " insert " << x << endl;
            continue ;
        }
       ans++ ;
       
       ii y = pq.top() ; pq.pop() ;
       //cout <<x <<" "<< y.P <<" romve->"<<y.Q << endl;
       fit = lower_bound( inuse.begin() , inuse.end() , y.Q);
       inuse.erase(fit) ;
       inuse.insert(x) ;
       vector<int> :: iterator it ;
       it = lower_bound( adj[x].begin() , adj[x].end() , i+1);
       if( it != adj[x].end())
       pq.push(ii(*it,x)) ;
       else
       pq.push(ii(1e9,x)) ;
      // cout << i <<" "<< ans << endl ; 
    }
  printf("%d\n",ans) ;
}
  return 0 ;
}