import java.io._
import java.util.StringTokenizer
import scala.util.control.Breaks.{breakable,break}


class InputReader(stream: InputStream) {
  private val reader = new BufferedReader(new InputStreamReader(stream))
  private var tokenizer: StringTokenizer = new StringTokenizer(reader.readLine())
  def next(): String = {
    while (!tokenizer.hasMoreTokens()) {
      tokenizer = new StringTokenizer(reader.readLine())
    }
    tokenizer.nextToken()
  }
}


object Main extends App {
    val in = new InputReader(System.in)
    val pw = new PrintWriter(System.out)

    val MOD = 1e9.toLong + 7
    val n, m = in.next().toInt
    val s = new Array[Int](n+1)
    val t = new Array[Int](m+1)
    for (i <- 1 to n) {
        s(i) = in.next().toInt
    }
    for (i <- 1 to m) {
        t(i) = in.next().toInt
    }

    val imos = Array.ofDim[Long](n+1, m+1)
    val dp = Array.ofDim[Long](n+1, m+1)
    for (i <- 1 to n) {
        for (j <- 1 to m) {
            if (s(i) == t(j)) {
                dp(i)(j) = imos(i-1)(j-1) + 1
                dp(i)(j) %= MOD
            }
            imos(i)(j) = imos(i-1)(j) + imos(i)(j-1) - imos(i-1)(j-1)
            // if (imos(i)(j) < 0) {
            //     imos(i)(j) += MOD
            // }
            imos(i)(j) %= MOD
            imos(i)(j) += dp(i)(j)
            imos(i)(j) %= MOD
        }
    }

    var ans = 0L
    for (i <- 1 to n) {
        for (j <- 1 to m) {
            ans += dp(i)(j)
            ans %= MOD
        }
    }
    println((ans + 1) % MOD) // 空文字列の分も足す
    flush()

}