I = lambda:map(int,raw_input().split()) p = 10**9+7 N,M = I();w = I();Mw = max(w) E = [[0]*N for i in xrange(N)] dp = [[0]*(Mw+1) for i in xrange(Mw+1)] dp[0][0]=1 for i in xrange(Mw): for j in xrange(i+1): dp[i+1][j+1] = (j+1)*(dp[i][j+1]+dp[i][j]) % p for i in xrange(N): E[i][i] = w[i] for t in xrange(M): i,j = I();E[i-1][j-1] = w[i-1] for k in xrange(N): for i in xrange(N): for j in xrange(N): t = E[k][j] if E[i][k] < t: t = E[i][k] if E[i][j] < t: E[i][j] = t A = 0 for i in xrange(N): for j in xrange(N): if w[j] <= E[i][j]: A = (A+dp[w[i]][w[j]]) % p print A