import
java.io.*;
import
java.util.*;
class
GFG {
static
int
currGCD;
static
int
gcd(
int
a,
int
b)
{
if
(b ==
0
)
return
a;
return
gcd(b, a % b);
}
static
void
depthFirst(
int
v,
ArrayList<Integer> graph[],
boolean
visited[],
int
values[])
{
visited[v] =
true
;
currGCD = gcd(currGCD, values[v -
1
]);
for
(
int
child : graph[v]) {
if
(visited[child] ==
false
) {
depthFirst(child, graph, visited, values);
}
}
}
static
void
maximumGcd(
int
Edges[][],
int
E,
int
V,
int
arr[])
{
ArrayList<Integer> graph[] =
new
ArrayList[V +
1
];
for
(
int
i =
0
; i < V +
1
; i++)
graph[i] =
new
ArrayList<>();
for
(
int
i =
0
; i < E; i++) {
int
u = Edges[i][
0
];
int
v = Edges[i][
1
];
graph[u].add(v);
graph[v].add(u);
}
boolean
visited[] =
new
boolean
[V +
1
];
int
maxGCD = Integer.MIN_VALUE;
for
(
int
i =
1
; i <= V; i++) {
if
(visited[i] ==
false
) {
currGCD =
0
;
depthFirst(i, graph, visited, arr);
if
(currGCD > maxGCD) {
maxGCD = currGCD;
}
}
}
System.out.println(maxGCD);
}
public
static
void
main(String[] args)
{
int
E =
3
, V =
5
;
int
arr[] = {
23
,
43
,
123
,
54
,
2
};
int
Edges[][] = { {
1
,
3
}, {
2
,
3
}, {
1
,
2
} };
maximumGcd(Edges, E, V, arr);
}
}