import java.awt.*; import java.io.*; import java.math.*; import java.util.*; public class Main{ FastScanner in; PrintWriter out; public void solve() { int n = in.nextInt(); int m = in.nextInt(); long[] fact = new long[m]; fact[0] = 1; for (int i = 1; i < m; i++) fact[i] = (fact[i - 1] * i) % m; int ans = 0; for (int i = 0; i < n; i++) { long x = in.nextLong(); long r = x % m; if (x % 2 == 0) { r *= (x / 2) % m; r %= m; r *= (x + 1) % m; r %= m; } else { r *= x % m; r %= m; r *= ((x + 1) / 2) % m; r %= m; } if (x+1 < m) { r += fact[(int)x + 1]; r %= m; } r = (r + m - 1) % m; ans += r; ans %= m; } out.println(ans); } public void run() { in = new FastScanner(); out = new PrintWriter(System.out); solve(); out.close(); } public static void main(String[] args) { new Main().run(); } class FastScanner { BufferedReader br; StringTokenizer st; FastScanner() { br = new BufferedReader(new InputStreamReader(System.in)); } String next() { while (st == null || !st.hasMoreTokens()) { try { st = new StringTokenizer(br.readLine()); } catch (IOException e) { e.printStackTrace(); } } return st.nextToken(); } int nextInt() { return Integer.parseInt(next()); } long nextLong() { return Long.parseLong(next()); } double nextDouble() { return Double.parseDouble(next()); } } }