import sys

class FenwickTree:
    def __init__(self, size):
        self.n = size
        self.tree = [0] * (self.n + 2)  # 1-based indexing
    
    def add(self, idx, delta):
        while idx <= self.n:
            self.tree[idx] += delta
            idx += idx & -idx
    
    def query(self, idx):
        res = 0
        while idx > 0:
            res += self.tree[idx]
            idx -= idx & -idx
        return res

def main():
    input = sys.stdin.read().split()
    ptr = 0
    N = int(input[ptr])
    ptr += 1
    M = int(input[ptr])
    ptr += 1
    B = list(map(int, input[ptr:ptr+N]))
    ptr += N
    operations = []
    for _ in range(M):
        L = int(input[ptr])
        ptr += 1
        R = int(input[ptr])
        ptr += 1
        operations.append((L, R))
    # Sort operations in decreasing order of R, then decreasing L
    operations.sort(key=lambda x: (-x[1], -x[0]))
    max_size = N + 2
    even_tree = FenwickTree(max_size)
    odd_tree = FenwickTree(max_size)
    for (L, R) in operations:
        # Compute K_i
        current_R = R
        # Query the current contribution
        if current_R % 2 == 0:
            contrib = even_tree.query(current_R)
        else:
            contrib = odd_tree.query(current_R)
        original_B = B[current_R - 1]
        current_B_R = original_B - contrib
        # Compute exponent R - L
        exponent = current_R - L
        sign = 1 if (exponent % 2 == 0) else -1
        K_i = current_B_R * sign
        # Compute C_i = K_i * (-1)^L
        L_parity = L % 2
        c_sign = -1 if L_parity else 1
        C_i = K_i * c_sign
        # Apply range update to even and odd trees
        # Even positions in [L, R]
        start_even = L if (L % 2 == 0) else L + 1
        end_even = R if (R % 2 == 0) else R - 1
        if start_even <= end_even:
            even_tree.add(start_even, C_i)
            even_tree.add(end_even + 1, -C_i)
        # Odd positions in [L, R]
        start_odd = L if (L % 2 == 1) else L + 1
        end_odd = R if (R % 2 == 1) else R - 1
        if start_odd <= end_odd:
            odd_tree.add(start_odd, -C_i)
            odd_tree.add(end_odd + 1, C_i)
    # Check all positions
    all_zero = True
    for j in range(1, N + 1):
        if j % 2 == 0:
            contrib = even_tree.query(j)
        else:
            contrib = odd_tree.query(j)
        original = B[j - 1]
        if original - contrib != 0:
            all_zero = False
            break
    print("YES" if all_zero else "NO")

if __name__ == "__main__":
    main()