import sys input = sys.stdin.readline N,M = map(int,input().split()) A = [0,0] + list(map(int,input().split())) lazy = [[] for i in range(N+1)] for i in range(2,N+1): for j in range(2,N//i+1): lazy[i*j].append(i) def calc(x,y,z=N): inv = (A[x]-A[y])*(A[y]-A[z])*(A[z]-A[x]) tmp = (A[z]-A[x]) * (pow(A[z]-1,M-1,mod) - pow(A[y]-1,M-1,mod)) tmp %= mod tmp += (A[y]-A[z]) * (pow(A[z]-1,M-1,mod) - pow(A[x]-1,M-1,mod)) tmp %= mod tmp = (tmp * pow(inv,mod-2,mod)) % mod return tmp div = [i for i in range(1,N+1) if N%i==0] res = 0 mod = 10**9+7 for d in div: if d!=1 and d!=N: for dd in lazy[d]: res += calc(dd,d) res %= mod lazy[d] = [] print(res) N_ok = [False for i in range(N+1)] for d in div: N_ok[d] = True lazy = [[] for i in range(N+1)] for _ in range(int(input())): x,y = map(int,input().split()) if y!=N: if N_ok[y]: res += calc(x,y) res %= mod else: lazy[y].append(x) else: y = x N_ok[y] = True for x in lazy[y]: res += calc(x,y) res %= mod lazy[y] = [] print(res)