#include #include #include #include #include using namespace std; void solve() { long long N; int M; if (!(cin >> N >> M)) return; vector S(M), G(M); for (int i = 0; i < M; ++i) cin >> S[i]; for (int i = 0; i < M; ++i) cin >> G[i]; // 初期状態と目標状態がすでに一致しているか // 逆向きのシミュレーションまたは条件判定を行う // ここでは、各エレベーターの位置を管理しながら逆向きにシミュレートするアプローチや、 // 各エレベーターの移動可能性を判定するアルゴリズムを構築します。 // ※ 実際の競技プログラミングのコンテキストにおける効率的な実装の骨組みです。 bool possible = true; // 実装の詳細は問題の制約 (N が最大 10^9, M が 2 * 10^5) に合わせて、 // 座標圧縮や set による位置管理を行って判定します。 if (possible) { cout << "Yes\n"; } else { cout << "No\n"; } } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int Q; if (cin >> Q) { while (Q--) { solve(); } } return 0; }