#include <cstdio>
const int Maxn=200000;
int n,q;
char s[Maxn+5],f[Maxn+5];
struct Segment{
	int l,r;
}seg[Maxn+5];
struct Segment_Tree{
	struct Segment_Node{
		int sum,lazy;
	}seg[Maxn<<2|5];
	void build(int root=1,int left=1,int right=n){
		seg[root].sum=0;
		seg[root].lazy=-1;
		if(left==right){
			seg[root].sum=f[left]-'0';
			return;
		}
		int mid=(left+right)>>1;
		build(root<<1,left,mid);
		build(root<<1|1,mid+1,right);
		seg[root].sum=seg[root<<1].sum+seg[root<<1|1].sum;
	}
	void update_tag(int root,int left,int right,int a){
		seg[root].lazy=a;
		seg[root].sum=(right-left+1)*a;
	}
	void push_down(int root,int left,int right){
		if(seg[root].lazy==-1){
			return;
		}
		int mid=(left+right)>>1;
		update_tag(root<<1,left,mid,seg[root].lazy);
		update_tag(root<<1|1,mid+1,right,seg[root].lazy);
		seg[root].lazy=-1;
	}
	void push_up(int root){
		seg[root].sum=seg[root<<1].sum+seg[root<<1|1].sum;
	}
	void update(int l,int r,int a,int root=1,int left=1,int right=n){
		if(l>right||r<left){
			return;
		}
		if(l<=left&&r>=right){
			update_tag(root,left,right,a);
			return;
		}
		push_down(root,left,right);
		int mid=(left+right)>>1;
		update(l,r,a,root<<1,left,mid);
		update(l,r,a,root<<1|1,mid+1,right);
		push_up(root);
	}
	int query(int l,int r,int root=1,int left=1,int right=n){
		if(l>right||r<left){
			return 0;
		}
		if(l<=left&&r>=right){
			return seg[root].sum;
		}
		push_down(root,left,right);
		int mid=(left+right)>>1;
		return query(l,r,root<<1,left,mid)+query(l,r,root<<1|1,mid+1,right);
	}
}tree;
void solve(){
	scanf("%d%d",&n,&q);
	scanf("%s",s+1);
	scanf("%s",f+1);
	tree.build();
	for(int i=1;i<=q;i++){
		scanf("%d%d",&seg[i].l,&seg[i].r);
	}
	bool flag=1;
	for(int i=q;i>0;i--){
		int sum=tree.query(seg[i].l,seg[i].r);
		if(!((seg[i].r-seg[i].l+1)&1)&&sum==((seg[i].r-seg[i].l+1)>>1)){
			flag=0;
			break;
		}
		if(sum<((seg[i].r-seg[i].l+2)>>1)){
			tree.update(seg[i].l,seg[i].r,0);
		}
		else{
			tree.update(seg[i].l,seg[i].r,1);
		}
	}
	if(flag){
		for(int i=1;i<=n;i++){
			if(s[i]-'0'!=tree.query(i,i)){
				flag=0;
				break;
			}
		}
		if(flag){
			puts("YES");
		}
		else{
			puts("NO");
		}
	}
	else{
		puts("NO");
	}
}
int main(){
	int T;
	scanf("%d",&T);
	while(T--){
		solve();
	}
	return 0;
}
