#include long long int popcount(long long int n) { long long int res = 0; for (; n > 0; n /= 2) res += n % 2; return res; } long long int a[44], b[44], c[44]; long long int dp1[1100006], dp2[1100006]; long long int dp3[1100006]; int main() { long long int n, m; scanf("%lld %lld", &n, &m); long long int i, j, k; for (i = 0; i < m; i++) { scanf("%lld %lld", &a[i], &b[i]); a[i]--; b[i]--; } for (i = 0; i < n; i++) scanf("%lld", &c[i]); for (i = 0; i < (1 << (m / 2)); i++) { dp1[i] = 0; for (k = 0; k < m / 2; k++) { if ((i & (1 << k)) == 0) continue; dp1[i] ^= (1 << a[k]); dp1[i] ^= (1 << b[k]); } } for (i = 0; i < (1 << (m - m / 2)); i++) { dp2[i] = 0; for (k = m / 2; k < m; k++) { if ((i & (1 << (k - m / 2))) == 0) continue; dp2[i] ^= (1 << a[k]); dp2[i] ^= (1 << b[k]); } } for (i = 0; i < (1 << n); i++) dp3[i] = -1; for (i = 0; i < (1 << (m - m / 2)); i++) { if (dp3[dp2[i]] < 0) dp3[dp2[i]] = popcount(i); else if (dp3[dp2[i]] > popcount(i)) dp3[dp2[i]] = popcount(i); } long long int ans = -1, cc = 0; for (i = 0; i < n; i++) cc ^= c[i] * (1 << i); for (i = 0; i < (1 << (m / 2)); i++) { if (dp3[cc ^ dp1[i]] < 0) continue; if (ans<0 || ans>dp3[cc ^ dp1[i]] + popcount(i)) ans = dp3[cc ^ dp1[i]] + popcount(i); } printf("%lld\n", ans); return 0; }