#include #include using namespace std; int n,m; int NEXT[500011]; int PREV[500011]; int seq[500011]; int L=0; int IT[2000001]; int LEAFOFFSET=1; inline int MAX(int a,int b) { if (a>b) return a; else return b; } int GetRec(int ver,int L,int R,int l,int r) { if (L>r || R=l && R<=r) { return IT[ver]; } else { return MAX( GetRec(2*ver,L,(L+R)/2,l,r) , GetRec(2*ver+1,(L+R)/2+1,R,l,r) ); } } int Get(int k) { return GetRec(1,1,LEAFOFFSET+1,k,n); } void Update(int ver,int val) { ver+=LEAFOFFSET; IT[ver]=val; ver/=2; while(ver!=0) { IT[ver]=MAX(IT[2*ver],IT[2*ver+1]); ver/=2; } return; } int main() { freopen("sequence.in","r",stdin); freopen("sequence.out","w",stdout); int a,b,c; int i; int NX,PV; int Val; scanf("%d %d",&n,&m); LEAFOFFSET=1; while(LEAFOFFSET