#include<bits/stdc++.h>
using namespace std ;
const int N = 1e5+5 ;
int p , n , seg[4*N] ;
vector<int> v[20] ;
int f(int le , int ri , int target , int v , int level){
if(ri<target || target<le) return 0 ;
if(le==target && ri==target){
seg[v]++ ;
return level ;
}
int mi = (le+ri)/2 ;
int temp = f(le,mi,target,v<<1,level+1) ;
temp = max(temp,f(mi+1,ri,target,(v<<1)|1,level+1)) ;
seg[v]++ ;
if(seg[v]==ri-le+1) return level ;
else return temp ;
}
void solve1(){
cout << (int)log2(n)+1 << endl ;
for(int i=1 ; i<n ; i++){
int x ; cin >> x ;
cout << f(0,n-1,x,1,1) << endl ;
}
}
void solve2(){
for(int i=0 ; i<n ; i++){
int x ; cin >> x ;
v[x].push_back(i) ;
}
int le = 0 , ri = n-1 ;
if(!v[1].empty()){
cout << v[1][0] << ' ' << v[1][0] << endl ;
return ;
}
for(int i=2 ; i<=17 ; i++){
if(upper_bound(v[i].begin(),v[i].end(),ri)-lower_bound(v[i].begin(),v[i].end(),le)==2){
int temp = lower_bound(v[i].begin(),v[i].end(),le)-v[i].begin() ;
cout << v[i][temp] << ' ' << v[i][temp+1] << endl ;
return ;
}
int temp = lower_bound(v[i].begin(),v[i].end(),le)-v[i].begin() , mi = (le+ri)/2 ;
if(v[i][temp]>mi) ri = mi ;
else le = mi+1 ;
}
}
int main(){
cin >> p >> n ;
if(p==1) solve1() ;
else solve2() ;
return 0 ;
}