output_description: Print the number of the possible values for S after the M operations, modulo
  1000000007.
  
  * * *
input_description: The input is given from Standard Input in the following format:
  
      
      
      N M
      S
      l_1 r_1
      :
      l_M r_M
attempt: # coding: utf-8
  # Your code here!
  import sys
  
  read = sys.stdin.read
  readline = sys.stdin.readline
  
  n, m = map(int, readline().split())
  s = input()
  mp = map(int, read().split())
  
  r = [0] * n
  for i, j in zip(mp, mp):
      if r[i - 1] < j - 1:
          r[i - 1] = j - 1
  
  for i in range(1, n):
      if r[i] < r[i - 1]:
          r[i] = r[i - 1]
  
  zero = [0] * n
  for i in range(n):
      zero[i] = zero[i - 1]
      if s[i] == "0":
          zero[i] += 1
  
  # print(r)
  # print(s)
  # print(zero)
  
  MOD = 10**9 + 7
  dp = [0] * n
  dp[0] = 1
  for i in range(n):
      L = max(zero[r[i]] + i - r[i], 0)
      R = min(zero[r[i]], i + 1)
      ndp = [0] * n
  
      for i in range(L, R + 1):
          if i:
              ndp[i] += dp[i - 1]
          ndp[i] += dp[i]
          ndp[i] %= MOD
      dp = ndp
  
      # print(L,R,r[i],zero[r[i]],dp)
  print(sum(dp) % MOD)
  
problem_description: Statement
  
  There is a string S of length N consisting of characters `0` and `1`. You will
  perform the following operation for each i = 1, 2, ..., m:
  
    * Arbitrarily permute the characters within the substring of S starting at the l_i-th character from the left and extending through the r_i-th character.
  
  Here, the sequence l_i is non-decreasing.
  
  How many values are possible for S after the M operations, modulo 1000000007(=
  10^9+7)?
samples: [{"input": "5 2\n    01001\n    2 4\n    3 5", "output": "6\n    \n\nAfter the first operation, S can be one of the following three: `01001`,\n`00101` and `00011`.\n\nAfter the second operation, S can be one of the following six: `01100`,\n`01010`, `01001`, `00011`, `00101` and `00110`.\n\n* * *"}, {"input": "9 3\n    110111110\n    1 4\n    4 6\n    6 9", "output": "26\n    \n\n* * *"}, {"input": "11 6\n    00101000110\n    2 4\n    2 3\n    4 7\n    5 6\n    6 10\n    10 11", "output": "143"}]