#include <bits/stdc++.h>
using namespace std;
const int maxN = 1e6 + 100;
int a[maxN];
vector<int> g[maxN], pos, values;
int n, m;
bool mark[maxN];
void input() {
  scanf("%d %d", &n, &m);
  for (int i = 1; i <= n; i++) scanf("%d ", &a[i]);
  for (int i = 1; i <= m; i++) {
    int k1, k2;
    scanf("%d %d", &k1, &k2);
    g[k1].push_back(k2);
    g[k2].push_back(k1);
  }
}
void dfs(int v) {
  mark[v] = true;
  pos.push_back(v);
  values.push_back(a[v]);
  for (int i = 0; i < g[v].size(); i++)
    if (!mark[g[v][i]]) dfs(g[v][i]);
}
void alg() {
  for (int i = 0; i < pos.size(); i++) a[pos[i]] = values[i];
}
int main() {
  input();
  for (int i = 1; i <= n; i++)
    if (!mark[i]) {
      dfs(i);
      sort(values.begin(), values.end());
      sort(pos.begin(), pos.end());
      reverse(values.begin(), values.end());
      alg();
      values.clear();
      pos.clear();
    }
  for (int i = 1; i <= n; i++) printf("%d ", a[i]);
  return 0;
}
