#include #include using namespace std; typedef long long LL; #define range(i,a,b) for(int i=(a);i<(b);i++) #define rep(i,n) range(i,0,n) #define P 1000000007 #define W 1001 LL D[W][W]; int w[W-1],E[300][300]; int main(){ int N,M,x,y; LL A = 0; rep(i,W)rep(j,W) D[i][j] = 0; D[0][0] = 1; rep(i,W-1) rep(j,i+1) D[i+1][j+1] = (LL) (j+1)*(D[i][j+1]+D[i][j])%P; scanf("%d%d",&N,&M); rep(i,N)scanf("%d",w+i); rep(i,N){rep(j,N) E[i][j] = 0; E[i][i] = w[i];} rep(i,M){scanf("%d%d",&x,&y);x--; E[x][--y] = w[x];} rep(k,N) rep(i,N) rep(j,N) E[i][j] = max(E[i][j],min(E[i][k],E[k][j])); rep(i,N) rep(j,N) if(w[j] <= E[i][j]) A = (A+D[w[i]][w[j]])%P; printf("%lld\n",A); return 0; }