template
               <class T>
                struct
                 RMQ{
                typedef
                vector<
                 T>V;  
                typedef
                size_t
               H;vector
     <V        >D;vector      <H
  >G;RMQ(V I){H n=I.size();D.resize
    (n);      D[0]=I;for      (H i
  =0;i<       n  -1  ; i++){for(H j
               =0 ;j <n
               ;j ++)if 
              (D[i].size
               () -j >1
               << i) {D
               [i +1 ].
               push_back
               (min(D[i
               ][j],D[i
               ][ j+ (1
               << i) ])
               ); }} G.
               resize(n
               +1);for(
               H i=0;i<
               n;)G[++i
               ]=O(i);}
               H O(H n)
               {H P=0;
               while(n
               /=2)P++;
               return P
          	   ;}T get(H
               l,H r){H
          	   a=G[r-l];
                return
               min(D[a]
               [l],D[a]
               [r-(1<<a
                 )]);
                  }};

    main(){vector<int>v;for(int i=1;i<
 30;i++)v.push_back(i);RMQ<int>st(v);for(
 int l=0;l<v.size();l++)for(int r=l+1;r<v
.size();r++){int correct=v[l];for(size_t i
=l+1;i<r;i++)correct=min(correct,v[i]);if(
  correct!=st(l, r))return 1;}return 0;}