#include<bits/stdc++.h>
using namespace std;
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
#define int long long
#define double long double
#define ordered_set tree<int, null_type,less_equal<int>, rb_tree_tag,tree_order_statistics_node_update>
#define S second
#define F first
#define fall(i,a,n) for(int i=a;i<=n;i++)
#define rfall(i,a,n) for(int i=a;i>=n;i--)
#define pb push_back
#define all(x) x.begin(),x.end()
#define lsb(x) (x & -x)
#define sz(x) (int)x.size()
const int MAXN=1e5+10;
const int MAXL=30;
const int inf=1e14;
const int MOD=998244353;
const int HASHBASE=146527;
const int HASHMOD=1e9+7;
const int SQRT=350;
typedef pair<int,int> pii;
typedef tuple<int,int,int> trio;
typedef tuple<int,int,int,int> squad;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
int seg[4*MAXN];
int add_element(int ind,int l,int r,int a,int dep=1){
seg[ind]++;
if(seg[ind]==r-l+1) return dep;
int m=(l+r)>>1;
if(a<=m) return add_element(2*ind,l,m,a,dep+1);
return add_element(2*ind+1,m+1,r,a,dep+1);
}
int32_t main(){
std::ios_base::sync_with_stdio(false);
cin.tie(NULL);
int P,n; cin>>P>>n;
if(P==1){
cout<<"17"<<endl;
fall(i,1,n-1){
int x; cin>>x;
cout<<add_element(1,0,n-1,x)<<endl;
}
}
else{
vector<int> v(n);
int ans=-1;
for(auto &u:v) cin>>u;
fall(i,0,n-1) if(v[i]==1) ans=i;
if(ans!=-1){
cout<<ans<<" "<<ans<<endl;
return 0;
}
auto solve_range=[&](auto &&self,int l,int r)->void{
if(r-l<=1){
cout<<l<<" "<<r<<endl;
return;
}
fall(i,l,r) v[i]--;
int m=(l+r)>>1;
int pa=-1,pb=-1;
fall(i,l,m) if(v[i]==1) pa=i;
fall(i,m+1,r) if(v[i]==1) pb=i;
if(pa!=-1 && pb!=-1){
cout<<pa<<" "<<pb<<endl;
return;
}
if(pa==-1) self(self,l,m);
else self(self,m+1,r);
};
solve_range(solve_range,0,n-1);
}
}