库特莉亚夫卡的排序
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

我叫 sakaido… 名字记不全了,不过也无所谓了。重要的是,我是一个神探,而且我必须将怪盗“十文字”捉拿归案。

“十文字“每次犯罪之前都会留下一定的”预告“,是想转达什么信号吗?还是单纯的恶趣味呢?不过,这些都与我无关。我的任务是破解这名为《库特莉亚夫卡的排序》的能量锁。

能量锁有 n 个位置(索引从 1 开始),每个位置上 i 有一个大小为 的能量。只有当能量非降序排列( 即对于任意位置 ,都有 )时,能量锁才会被开启。我可以通过交换若干次某两个位置的能量达成上述目的。不过,由于“十文字“的特殊设计,只有位于 m 对位置上的能量可以相互交换,而交换其他位置则会引起爆炸。

由于这可能是“十文字“的恶作剧,这能量锁可能不能通过交换达成非降序。为减少时间的浪费,请你帮忙告诉我,这个能量锁可能被开启吗?

输入描述:

输入的第一行是两个整数  ,分别表示能量锁位置的个数及存在 m 对位置可以交换。
接下来的一行为 n 个整数,第i个整数表示i位置的能量大小
接下来 m 行,每行2个整数 ,表示位置 u 和位置 v 的能量可以相互交换。

输出描述:

如果能量锁是可开启的,输出Yes,反之输出No。
示例1

输入

复制
5 4
2 3 1 4 5
4 5
1 2
2 3 
3 4

输出

复制
Yes
示例2

输入

复制
7 5
1 111 2 4 6 100 112 
3 4
4 5
4 6
2 3
2 1

输出

复制
Yes
示例3

输入

复制
7 5
1 2 4 4 6 8 4
1 3 
3 2
4 5
1 2
4 6

输出

复制
No