時間制限 : sec, メモリ制限 : KB
English / Japanese  

RMQ and RUQ

数列 A = {a0, a1 ,...,an−1} に対し、次の2つの操作を行うプログラムを作成せよ。

  • update(s, t, x): as, as+1,..., atxに変更する。
  • find(s, t): as, as+1,..., atの最小値を出力する。

ただし、ai (i = 0, 1,...,n−1)は、231-1で初期化されているものとする。

入力

n q
query1
query2
:
queryq

1行目にAの要素数n, クエリの数qが与えられる。続くq行にi 番目のクエリ queryi が与えられる。queryi は以下のいずれかの形式で与えられる。

0 s t x

または

1 s t

各クエリの最初の数字は、クエリの種類を示し、'0'がupdate(s, t, x)、'1'がfind(s, t)を表す。

出力

findクエリについて、最小値を1行に出力せよ。

制約

  • 1 ≤ n ≤ 100000
  • 1 ≤ q ≤ 100000
  • 0 ≤ s ≤ t < n
  • 0 ≤ x < 231−1

入力例 1

3 5
0 0 1 1
0 1 2 3
0 2 2 2
1 0 2
1 1 2

出力例 1

1
2

入力例 2

1 3
1 0 0
0 0 0 5
1 0 0

出力例 2

2147483647
5