3 10
2 3 1
1 1
3 3
3 3
3 2
1 1
2 2
3 1
1 3
2 1
3 3
 7 20
6 2 5 7 3 1 4
7 7
1 1
2 2
6 1
4 4
2 2
2 2
6 6
3 5
7 4
1 6
4 4
6 1
1 1
3 3
5 3
3 5
5 3
2 2
4 4
 4 20
4 2 3 1
2 2
1 4
2 2
1 1
3 3
3 3
1 4
3 3
2 2
3 3
4 1
2 2
1 4
3 3
4 1
1 1
3 3
2 2
2 2
4 4
 9 6
9 2 3 4 5 6 7 8 1
1 4
4 7
2 5
5 8
3 6
6 9
 7 20
5 6 2 1 7 4 3
1 4
5 4
7 5
7 4
2 4
6 5
1 5
3 3
1 5
6 2
7 3
4 1
6 4
7 5
7 3
1 5
1 3
6 6
5 2
5 7
 3 1
3 2 1
1 2
 8 20
8 4 7 2 6 5 3 1
6 6
2 4
7 3
4 2
3 3
6 5
6 5
8 8
3 7
6 6
7 3
4 4
1 8
1 8
3 7
8 8
6 6
2 4
8 8
4 2
 3 2
1 3 2
1 3
3 1
 20 20
4 12 7 1 16 19 3 10 14 8 13 2 11 9 20 5 18 17 6 15
9 14
3 3
8 10
7 3
20 20
5 16
13 11
6 19
6 6
12 2
12 2
13 11
18 18
18 17
9 14
8 8
20 15
4 4
16 16
4 1
 9 20
6 7 9 1 3 4 8 2 5
8 2
2 7
1 6
6 1
6 1
3 3
9 5
8 2
8 2
9 5
4 1
5 5
9 3
9 3
6 6
7 8
4 6
7 8
1 1
8 2
 5 20
2 4 1 5 3
1 4
3 1
4 5
1 1
4 2
3 2
4 4
1 2
4 5
5 5
5 5
2 2
2 5
5 3
5 5
3 3
5 1
2 2
4 5
1 5
 4 20
3 4 1 2
2 4
4 4
3 1
3 1
4 4
3 3
4 4
1 1
4 4
4 2
3 3
1 3
1 3
2 2
1 3
1 1
3 1
2 4
4 4
2 4
 6 20
5 3 2 4 1 6
3 2
5 5
3 2
4 4
4 4
4 4
5 1
3 2
3 2
1 1
6 6
6 6
6 6
4 4
6 6
1 5
1 1
5 1
2 2
2 3
 83 8
54 3 52 12 61 36 65 62 69 49 47 77 31 15 21 14 73 29 6 26 37 17 81 75 43 30 58 76 16 8 11 5 27 35 7 66 50 67 2 39 45 28 60 71 38 82 53 1 42 13 44 72 22 4 9 25 19 57 10 70 18 68 32 34 20 80 23 79 24 63 64 51 59 41 74 48 40 33 46 83 55 56 78
48 80
1 8
71 54
15 59
72 46
36 9
64 29
55 58
 1 1
1
1 1
 5 20
3 4 1 5 2
2 4
3 1
2 2
4 5
4 5
5 2
1 1
2 4
3 3
4 2
3 1
1 1
5 2
1 3
3 1
4 2
1 3
3 3
4 2
4 2
 6 20
4 6 1 3 2 5
2 2
6 5
3 4
3 4
5 6
3 3
5 5
6 6
4 3
2 2
2 2
5 2
3 4
1 4
5 2
4 3
2 5
1 4
3 1
4 3
 2 10
1 2
1 1
2 2
2 2
1 1
1 1
2 2
2 2
1 1
2 2
1 1
 5 3
5 2 3 4 1
2 4
1 4
3 4
 4 1
4 3 1 2
3 4
 3 1
1 3 2
1 2
 2 10
2 1
2 1
1 2
1 1
2 1
1 1
2 1
1 1
1 1
2 1
2 1
 3 1
2 3 1
1 1
 8 1
3 4 1 2 7 8 5 6
3 4
 3 10
1 2 3
2 2
1 1
2 2
3 3
1 1
3 3
3 3
3 3
2 2
1 1

3 2 1 
 6 2 5 7 3 1 4 
 4 2 3 1 
 9 8 6 7 5 3 4 2 1 
 7 6 5 4 3 2 1 
 3 2 1 
 8 4 7 2 6 5 3 1 
 2 3 1 
 4 12 7 1 16 19 3 10 14 8 13 2 11 9 20 5 18 17 6 15 
 6 8 9 4 5 1 7 2 3 
 5 4 3 2 1 
 3 4 1 2 
 5 3 2 4 1 6 
 62 3 52 12 61 36 65 54 69 49 47 77 31 15 21 14 73 29 6 26 37 17 81 75 43 30 58 76 34 8 11 5 27 35 7 66 50 67 2 39 45 28 60 71 38 82 53 83 42 13 44 72 22 64 57 25 19 9 10 70 18 68 32 16 20 80 23 79 24 63 4 51 59 41 74 48 40 33 46 1 55 56 78 
 1 
 3 5 1 4 2 
 4 6 3 1 5 2 
 1 2 
 5 4 3 2 1 
 4 3 2 1 
 3 1 2 
 2 1 
 2 3 1 
 3 4 2 1 7 8 5 6 
 1 2 3 

#include <bits/stdc++.h>
using namespace std;
long long MOD = 1e9 + 7;
bool isPrime(long long n) {
  if (n <= 1) return false;
  if (n <= 3) return true;
  if (n % 2 == 0 || n % 3 == 0) return false;
  for (long long i = 5; i * i <= n; i = i + 6)
    if (n % i == 0 || n % (i + 2) == 0) return false;
  return true;
}
long long power(long long a, long long b, long long p) {
  if (a == 0) return 0;
  long long res = 1;
  if (a >= p) a = a % p;
  while (b > 0) {
    if (b & 1) res = (res * a) % p;
    b >>= 1;
    a = (a * a) % p;
  }
  return res;
}
vector<long long> decToBinary(long long n) {
  vector<long long> v;
  for (long long i = 31; i >= 0; i--) {
    long long k = n >> i;
    if (k & 1)
      v.push_back(1);
    else
      v.push_back(0);
  }
  return v;
}
long long binarySearch(long long arr[], long long l, long long r, long long x) {
  if (r >= l) {
    long long mid = l + (r - l) / 2;
    if (arr[mid] == x) return mid;
    if (arr[mid] > x) return binarySearch(arr, l, mid - 1, x);
    return binarySearch(arr, mid + 1, r, x);
  }
  return -1;
}
long long maxResult(long long n, long long a, long long b, long long c) {
  long long maxVal = 0;
  for (long long i = 0; i <= n; i += a)
    for (long long j = 0; j <= n - i; j += b) {
      float z = (float)(n - (i + j)) / c;
      if (floor(z) == ceil(z)) {
        long long x = i / a;
        long long y = j / b;
        maxVal = max(maxVal, x + y + (long long)z);
      }
    }
  return maxVal;
}
bool binary_search_vector(const vector<long long>& sorted_vec, long long key) {
  size_t mid, left = 0;
  size_t right = sorted_vec.size();
  while (left < right) {
    mid = left + (right - left) / 2;
    if (key > sorted_vec[mid]) {
      left = mid + 1;
    } else if (key < sorted_vec[mid]) {
      right = mid;
    } else {
      return true;
    }
  }
  return false;
}
void SeiveOfEratosthenes(long long n, long long k) {
  bool prime[n + 1];
  vector<long long> v;
  memset(prime, true, sizeof(prime));
  for (long long i = 2; i * i <= n; i++) {
    if (prime[i]) {
      for (long long j = i * i; j <= n; j += i) {
        prime[j] = false;
      }
    }
  }
  for (long long i = 2; i <= n; i++) {
    if (prime[i]) {
      v.push_back(i);
    }
  }
}
long long gcd(long long a, long long b) {
  if (a == 0) return b;
  return gcd(b % a, a);
}
const long long N = 1000005;
long long rnk[N];
long long par[N];
void make_set(long long n) {
  for (long long i = 1; i <= n; i++) {
    par[i] = i;
    rnk[i] = 1;
  }
}
long long find_set(long long x) {
  if (par[x] == x) {
    return x;
  }
  return par[x] = find_set(par[x]);
}
void union_set(long long a, long long b) {
  long long p1 = find_set(a);
  long long p2 = find_set(b);
  if (p1 == p2) return;
  if (rnk[p1] > rnk[p2]) {
    par[p2] = p1;
    rnk[p1] += rnk[p2];
  } else {
    par[p1] = p2;
    rnk[p2] += rnk[p1];
  }
}
void solve() {
  long long n, k;
  cin >> n >> k;
  make_set(n);
  long long a[n + 1];
  for (long long i = 1; i <= n; i++) cin >> a[i];
  for (long long i = 0; i < k; i++) {
    long long x, y;
    cin >> x >> y;
    union_set(x, y);
  }
  vector<long long> v[n + 1];
  for (long long i = 1; i <= n; i++) {
    v[par[i]].push_back(i);
  }
  long long b[n + 1];
  for (long long i = 1; i <= n; i++) {
    if (v[i].size() > 0) {
      vector<long long> u;
      for (auto j : v[i]) {
        u.push_back(a[j]);
      }
      sort(u.rbegin(), u.rend());
      sort(v[i].begin(), v[i].end());
      long long l = 0;
      for (auto j : v[i]) {
        b[j] = u[l];
        l++;
      }
    }
  }
  for (long long i = 1; i <= n; i++) cout << b[i] << " ";
}
int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  long long t = 1;
  while (t--) {
    solve();
  }
}
