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>
#define N 1000005
using namespace std;
typedef pair<int,int>pa;
vector<pa>vec;
vector<int>num;
vector<vector<int>>record;
vector<vector<int>>graph;
vector<int>ma;
vector<int>result;
vector<int>tmp,index;
int vis[N],sign[N];
int parent[N];
int n,m;

void init()
{
    for(int i=1; i<=n; i++)
        parent[i]=i;
    record.resize(n+1);
    result.resize(n+1);
    graph.resize(n+1);
}
int findfather(int x)
{
    if(x=parent[x])
        return x;
    return parent[x]=findfather(parent[x]);
}
void Union(int x,int y)
{
    int rx=findfather(x);
    int ry=findfather(y);
    if(rx>ry)
        swap(rx,ry);
    parent[ry]=rx;
}
bool cmp(pa x,pa y)
{
    if(x.first==y.first)
        return x.second<y.second;
    return x.first<y.first;
}
void dfs(int x)
{
    if(graph[x].size()==0)
        return ;
    vis[x]=1;
    for(int i=0; i<graph[x].size(); i++)
    {
        int y=graph[x][i];
        if(vis[y])
            continue;
        int rx=findfather(x);
        int ry=findfather(y);
        Union(rx,ry);
        dfs(y);
    }
}
int main()
{
    scanf("%d%d",&n,&m);
    init();
    int t;
    for(int i=0; i<n; i++)
    {
        scanf("%d",&t);
        num.push_back(t);
    }
    int x,y;
    for(int i=0; i<m; i++)
    {
        scanf("%d%d",&x,&y);
        if(x>y)
            swap(x,y);
        vec.push_back(pa(x,y));
    }
    sort(vec.begin(),vec.end(),cmp);
    unique(vec.begin(),vec.end());
//    cout<<endl;
//    for(int i=0;i<vec.size();i++)
//        cout<<vec[i].first<<' '<<vec[i].second<<endl;
//    cout<<endl;
    for(int i=0; i<vec.size(); i++)
    {
        int x=vec[i].first;
        int y=vec[i].second;
        if(x!=y)
            graph[x].push_back(y);
    }
    for(int i=1; i<=n; i++)
    {
        if(!vis[i])
            dfs(i);
    }
    for(int i=1; i<=n; i++)
    {
        t=findfather(i);
        if(!sign[t])
            ma.push_back(t);
        sign[t]=1;
        record[t].push_back(i);
    }
//    for(int i=0;i<ma.size();i++)
//    {
//        for(int j=0;j<record[ma[i]].size();j++)
//            cout<<record[ma[i]][j]<<' ';
//        cout<<endl;
//    }
    for(int i=0; i<ma.size(); i++)
    {
        tmp.clear(),index.clear();
        int k=ma[i];
        tmp.push_back(num[k-1]);
        index.push_back(k-1);
        for(int i=0; i<record[k].size(); i++)
        {
            t=record[k][i];
            if(t==k)
                continue;
            tmp.push_back(num[t-1]);
            index.push_back(t-1);
        }
        sort(index.begin(),index.end());
        sort(tmp.begin(),tmp.end());
        for(int i=0; i<index.size(); i++)
            result[index[i]]=tmp[index.size()-i-1];
    }
    for(int i=0; i<n; i++)
    {
        if(!i)
            printf("%d",result[i]);
        else
            printf(" %d",result[i]);
    }
    printf("\n");
    return 0;
}
