BTCODE_K - Array Sorting

Sumit specialises in sorting algorithms, and Abhishek decides to test Sumit's coding skills. An array of 'n' numbers a[0], a[1], a[2] ... a[n-1] is given. Abhishek gives a sequence of inputs of the form "v i j". Each input is either a query or an update (query if 'v' is 0, update otherwise).

For any input of the form "0 i j", Sumit's output should be as follows:
If the subarray a[i], a[i+1] ... a[j] is unsorted, output 0.
If the subarray a[i], a[i+1] ... a[j] is sorted in non-descending order, output 1.
If the subarray a[i], a[i+1] ... a[j] is sorted in non-ascending order, output 2.
If the subarray a[i], a[i+1] ... a[j] is sorted in both non-ascending and non-descending order (i.e., if all the elements in the range are equal), output 3.

Any other input "v i j" (v!=0) should be treated as an update, as follows:
For each element in the subarray a[i], a[i+1] ... a[j], Sumit has to replace the element a[k] with v-a[k].

Sumit is really tired and does not want to write a program. Can you write a program for Sumit, which responds to Abhishek's instructions?

Input

The first line of input contains 2 space separated integers 'n' and 'q'. The second line contains 'n' integers a[0], a[1] ....., a[n-1]. Each of the next 'q' lines contain 3 integers 'v', 'i', 'j'.

Output

For each query, output a single integer 0, 1, 2 or 3, denoting the answer.

Example

Input:
4 5
3 -2 -5 1
1 1 3
0 0 3
0 0 2
0 2 3
0 0 1

Output:
0
1
2
3

Constraints

1 <= n <= 100000
1 <= q <= 100000
-5000 <= a[i] <= 5000
-5000 <= v <= 5000

Explanation

Initial array is {3, -2, -5, 1}. After first update, the array will be {3, 3, 6, 0}. Now, from indices '0' to '3', it is unsorted. From indices '0' to '2', it is sorted in non-descending order. From indices '2' to '3', it is sorted in non-ascending order. Between indices '0' and '1', the values are equal.


Added by:suhash
Date:2011-02-26
Time limit:1s
Source limit:50000B
Memory limit:1536MB
Cluster: Cube (Intel G860)
Languages:All except: ASM64
Resource:Bytecode 2011, NIT Trichy, India

hide comments
2016-03-27 13:25:11
Time limit is too strict. I got TLE in JAVA and AC in C++ with the same code. I also got AC on the version on Codechef where time limit is 2 seconds.
© Spoj.com. All Rights Reserved. Spoj uses Sphere Engine™ © by Sphere Research Labs.