Red Black Tree
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

给一个拥有 n 层的红黑树,第一层有一片叶子,第二层有两片叶子....第 n 层有 n 片叶子。第 i 行第 j 片叶子表示为 (i, j) , 如下图,所以除了第 n 层的叶子之外,每一片叶子下面都拥有两片叶子,即叶子 (i, j) 下面的叶子是



之后给定 k 片叶子的位置 (x, y),表示该叶子为黑色,其他叶子为红色。

现给定两条规则
  • 若叶子为黑色,则它下面两片叶子也要为黑色。
  • 若它下面两片叶子都是黑色,则它也要为黑色。

现在可以将部分红色叶子染黑,使得每一个黑色叶子都满足上面的规则,同时让染黑的叶子数量最少。

问最终树上黑色叶子数量是多少?

输入描述:

第一行包含两个整数  ---  表示层数和初始黑色叶子的数量。

接下来 k 行,每行包含两个整数 --- 表示黑色叶子的位置在 (x, y),数据保证不重复。

输出描述:

输出最终树上黑色叶子的数量。
示例1

输入

复制
5 3
2 1
3 1
4 1

输出

复制
10
示例2

输入

复制
3 1
1 1

输出

复制
6