东京涩谷的十字路口以人流量巨大而闻名,这导致人们经常会撞在一起。这个十字路口可以建模为一个凸多边形,其中 $n$ 个准备过马路的人最初站在多边形周界下半部分上的某一点。当交通信号灯变换时,每个人开始向多边形周界上半部分上的一个唯一目标点走去。每个人走的路径看起来可能像意大利面一样(甚至可能自交),但它永远不会离开多边形,且任意两条路径相交次数不超过一次。
Oskar 是一位极客,他正在附近的星巴克观察这个十字路口。他将路口的人按逆时针方向依次编号为 $1$ 到 $n$(从最左侧的人开始)。遗憾的是,他并不知道路口每个人的预定路径,但他收集到了一些情报,准确地告诉了他哪些人的路径会相互交叉(这些信息与物理现实一致)。
作为一名书呆子,他显然知道墨菲定律:“凡是可能出错的事,就一定会出错!”因此,所有可能撞到一起的人,即所有路径交叉的人,实际上都会撞到一起!他现在问自己:“在 $n$ 个人都过完马路后,每个人都互相撞到过的最大群体的大小是多少?”这真是一个极客且棘手的问题,你能帮帮他吗?
图 E.1:对第一个样例测试用例的一种可能解释的美丽插图。
输入格式
第一行包含一个整数 $1 \le n \le 800$,表示路口的人数,以及一个整数 $0 \le m \le 10\,000$,表示会交叉(即相交)的路径数量。接下来的 $m$ 行,每行包含两个整数 $a$ 和 $b$($1 \le a < b \le n$),表示人 $a$ 的路径与人 $b$ 的路径会交叉。(输入中不会出现重复的对。)
输出格式
输出一个整数,表示每个人都互相撞到过的最大群体的大小。
样例
样例输入 1
3 1 1 2
样例输出 1
2
样例输入 2
5 7 1 3 1 5 1 4 2 4 3 4 2 5 2 3
样例输出 2
3